c – 何时释放与静态变量相关的内存?

c – 何时释放与静态变量相关的内存?,第1张

概述参见英文答案 > Destruction order of static objects in C++                                    9个 我想知道是否有人可以对c中的内存释放过程有所了解. 如果我有一个我声明为静态的结构,那么它的构造函数是第一个执行的东西,它的析构函数是最后执行的东西: struct initializer execute_before_ 参见英文答案 > Destruction order of static objects in C++9个
我想知道是否有人可以对c中的内存释放过程有所了解.

如果我有一个我声明为静态的结构,那么它的构造函数是第一个执行的东西,它的析构函数是最后执行的东西:

struct initializer execute_before_and_after_main {     initializer() { init(); }     ~initializer() { cleanup(); }}static initializer execute_around_main;

然后我有类似的东西:

class my_class {    my_object objects[100];}extern my_class gobal_my_class;my_class global_my_class;

主要在这里并不重要:

int main (int argc,char* argv[]) {    ....}

当调用cleanup()时,对象数组现在是否包含解除分配/无效的内存?是否有一个标准的初始化/破坏序列,c在这里实现,有人可能指向我?

谢谢

编辑:我理解这种类型的代码可能不是最佳实践,但我仍然想知道行为是否已定义.

解决方法 静态和全局变量都有 static storage duration意味着它们在程序结束时被释放.通过读取其中一个副本,我发现如果代码全部在同一个翻译单元(您的)中,那么具有静态存储的对象将按照与构造相反的顺序进行破坏.如果对象位于不同的翻译单元中,则无法保证任何内容.

When cleanup() is called,is the objects array Now containing deallocated/invalID memory?

是的,但这并不重要,因为只有在对象超出范围时才会调用它

Is global_my_class destructed before execute_around_main?

是的,全局我的类首先被破坏,因为它最后被初始化

总结

以上是内存溢出为你收集整理的c – 何时释放与静态变量相关的内存?全部内容,希望文章能够帮你解决c – 何时释放与静态变量相关的内存?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1244541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存