【问题标题】:Static array of structs with pointers带有指针的静态结构数组
【发布时间】:2016-04-19 22:48:25
【问题描述】:

我们有一个这样的结构数组:

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_ 也是静态的,它们位于哪里(堆、堆栈)?如果它们不是静态的,那么如何使它们成为静态的?

【问题讨论】:

    标签: c arrays struct static numa


    【解决方案1】:

    数组allocationsalloc_memory_ 成员是静态的,但指向的内存不一定是静态的。

    在您的情况下,由于您在main 中为它们分配了numa_alloc_onnode,这意味着它们指向动态存储。

    如果你真的想要静态存储,你可以在结构之前定义内存:

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

    【讨论】:

    • 好的,谢谢。在这种情况下,我需要一个可以生成代码类型static char bufferN[SIZE]; 的宏。考虑到上面的static struct allocation allocations[] 被初始化为static struct allocation allocations[] = ALLOCATIONS;,其中ALLOCATIONS 是由-D'ALLOCATIONS={ {1024, buffer1}, {2048, buffer2} }' 等用户在编译时定义的,因此宏必须解析{ {1024, buffer1}, {2048, buffer2} } 并生成代码:static char buffer1[1024]; static char buffer2[2048];。你能指点我这样一个宏吗?谢谢
    • 我建议不要通过宏传递代码,你可以传递缓冲区的大小,静态char buffer[N};-DN=1024
    猜你喜欢
    • 2022-01-14
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多