2016-11-06 112 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字節對齊。