2016-11-06 87 views
22

this文章如何避免错误共享,剪断对准下面的代码是提出:双括号的含义“[[foo()]] type name;”语法在c + +?

// C++ (using C++0x alignment syntax) 
template<typename T> 
struct cache_line_storage { 
    [[ align(CACHE_LINE_SIZE) ]] T data; 
    char pad[ CACHE_LINE_SIZE > sizeof(T) 
     ? CACHE_LINE_SIZE - sizeof(T) 
     : 1 ]; 
}; 

什么是4号线的含义是什么? 我从来没有见过这种双括号的语法。

回答

26

这是attribute指定语法。它被引入作为一种统一的语法来访问以前特定于编译器的扩展(现在有些是标准化的)。

在这种情况下,代码告诉编译器将dataCACHE_LINE_SIZE字节对齐。