2016-04-19 2 views
0

У нас есть массив структур, как этот:Статический массив структур с указателями

struct allocation 
{ 
    size_t alloc_size_; 

    char* alloc_memory_; 
}; 

static struct allocation allocations[] = 
    {{1024, NULL},{2048, NULL},}; 

позже в main() это члены alloc_memory_ инициализируются с помощью numa_alloc_onnode().

Так что вопрос: есть alloc_memory_ также статический и где они расположены (куча, стек)? Если они не статичны, то как сделать их статическими?

ответ

2

Элемент alloc_memory_ из массива allocations являются статическими, но указанная память не обязательно является статической.

В вашем случае, поскольку вы выделили их numa_alloc_onnode в main, это означает, что они указали на динамическое хранилище.

Если вы действительно хотите статической памяти тоже можно определить память перед структурой:

static char buffer1[1024]; 
static char buffer2[2048]; 

static struct allocation allocations[] = 
{ {1024, buffer1}, {2048, buffer2} }; 
+0

Ok спасибо. В этом случае мне понадобится макрос, который будет генерировать код типа 'static char bufferN [SIZE];'. Считайте, что 'static allocation allocations allocations []' above инициализируется как 'статические распределения распределения структуры [] = ALLOCATIONS;', где 'ALLOCATIONS' определяется во время компиляции пользователем, как' -D'ALLOCATIONS = {{1024, buffer1} , {2048, buffer2}} 'Таким образом, макросу пришлось бы анализировать '{{1024, buffer1}, {2048, buffer2}}' и генерировать код: 'static char buffer1 [1024]; static char buffer2 [2048]; '. Не могли бы вы указать мне на такой макрос? Спасибо – Dimon

+0

Я предлагаю не передавать код через макросы, вы можете передать размер буфера, хотя статический 'char buffer [N};' и '-DN = 1024' – fluter

Смежные вопросы