繁体   English   中英

在静态全局区域中声明大型struct对象是否可以?

[英]Is it okay to declare large struct objects in the static-global area?

我正在考虑创建一个全局静态结构,如下所示:

typedef struct {
    Thing things[1024];
} MyBigStruct;

static MyBigStruct s;

有没有理由,无论是内存还是其他原因,为什么不在“静态全局区域”中放置大型struct对象? 这个区域有限制吗? 我应该在堆中使用malloc声明这个吗?

请参阅针对全局变量的编码实践,但仅针对技术方面。

在全局中声明的变量通常存在于内存的数据段区域中。 这个区域对堆栈的大小没有相同的限制(除了物理上可用的内存),因此全局声明大变量是完全正常的。

根据这些变量的大小,您可能会比使用动态分配获得轻微的运行时间增益,因为此变量的空间在程序启动时被搁置,而不是从堆分配此内存的运行时成本。

有没有理由,无论是内存还是其他原因,为什么不在“静态全局区域”中放置大型struct对象?

以你所描述的方式使用全局变量是完全正确的,甚至在某些方面也是有利的。 (例如,就动态分配的运行时速度而言)。
但是 ,尽管与大小无关,但使用全局变量还有其他缺点 例如,使用多个线程时全局变量可能会有问题。 代码中访问全局的任何函数都不再是可重入的 ,这是线程安全函数的原则之一。 如果您的应用程序中包含多线程 ,则需要额外的预防措施来在线程之间共享全局对象。

这个区域有限制吗? 我应该在堆中使用malloc声明这个吗?_

内存的数据部分[是]用于全局和静态数据... ,表明其大小仅受系统上可用物理内存量的限制。 可以在此处找到 有关物理内存限制的更详细讨论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM