c – 编译器特定的内存初始化

前端之家收集整理的这篇文章主要介绍了c – 编译器特定的内存初始化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法确保整个程序的某些对象的静态对象初始化顺序.我有内存分配器,我希望将其作为程序中的第一件事分配,因为它们将在整个程序中使用,我想使用这些分配器来分配所有后续内存.

我理解这可能是特定于编译器的,因为我不相信C标准允许这样做.我感兴趣的两个编译器是gcc和VS2010的编译器.如果有办法,有人可以解释一下吗?

编辑

我不想“首次使用时构造”,因为分配器将分配一个我想在程序开始时初始化的大块内存.

解决方法

您可以通过使用特定于编译器的指令来稍微影响初始化的顺序. MSVC有一个pragma
#pragma init_seg({ compiler | lib | user | "section-name" [,func-name]} )

这可以在某种程度上为特定模块设置优先级.请参阅此参考资料以获取init_seg.

gcc编译器具有类似/相关的属性语法,用于设置特定初始化的相对优先级.看起来像这样

Some_Class  A  __attribute__ ((init_priority (2000)));
Some_Class  B  __attribute__ ((init_priority (543)));

并在本页@L_301_2@上进行了解释.

猜你在找的C&C++相关文章