Мой вопрос состоит из 2 частей.
это баг на солнце, есть ли патч или мне нужно самому написать мемлайн.
Кроме того, у меня есть структура (, а не мой код ):
typedef struct CLHLockStruct {
volatile CLHLockNode CACHE_ALIGN *Tail ;
volatile CLHLockNode CACHE_ALIGN *MyNode[N_THREADS] ;
volatile CLHLockNode CACHE_ALIGN *MyPred[N_THREADS] ;
} CLHLockStruct;
. Собираю под MVSC (visual studio 2008):
CACHE_LINE_SIZE = 64
CACHE_ALIGN = __declspec(align(CACHE_LINE_SIZE))
N_THREADS = 8
sizeof(CLHLockStruct)=192
Код изначально был написан для архитектуры sparc, и я пытаюсь перенести его на MVSC, не сильно меняя код.
в своем коде они используют memalign (CACHE _LINE _SIZE,sizeof (CLHLockStruct )), и я изменил его на _выровненный _malloc, моя проблема в том, что sizeof (CLHLockStruct )не является степенью двойки, я могу написать некоторую функцию, которая находит следующее число, являющееся степенью двойки.
Является ли их лучший подход?
РЕДАКТИРОВАТЬ1
Как я могу дополнить эту структуру, чтобы ее размер был равен степени 2?
РЕДАКТИРОВАТЬ2
Есть ли функция, которая действует как _выровненная _malloc и malloc :, возвращает указатель памяти, выровненный по кратному размеру блока _, но не требует, чтобы байты были степенью 2?