jjzjj

在 Linux 上动态链接到 libc 时调用 `atexit`

如果我有以下用C编写的程序(在Debian8.7上用GCC编译),我可以像您期望的那样调用atexit():#includevoidexit_handler(void){return;}intmain(){atexit(exit_handler);return0;}当我编译并运行它时:$gcctest.c$./a.out正如您所期望的那样,不输出任何内容。事实上,当我运行ldd时,我得到:$ldda.outlinux-vdso.so.1(0x00007fffbe592000)libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6(0x00007fe07d3

c - 在 atexit() 中释放

在atexit()函数中释放内存有什么意义吗?我有一个全局变量,在启动后会被malloc'ed。我可以写一个atexit()函数来释放它,但是当程序退出时系统不会回收所有内存吗?自己整理并积极清理有什么好处吗? 最佳答案 不是在C中-这就像在船沉没在你周围时重新布置躺椅。在C++中,答案是不同的,因为对象可以在其析构函数中删除临时文件等,因此您需要确保它们被调用。 关于c-在atexit()中释放,我们在StackOverflow上找到一个类似的问题: htt

c++ - C++ 中全局对象销毁和 atexit 之间的顺序

我想知道在C++中,全局对象的销毁和atexit之间可以确定顺序我有一个全局对象并注册atexit函数,如下所示:staticMyClassg_class;voidonExit(){//dosomedestruction}intmain(){atexit(onExit);return0;}我发现onExit()在VisualStudio2012和gcc4.7.2中的MyClass::~MyClass()之前被调用。我确定总是在全局对象(如g_class)销毁之前调用onExit吗?我想知道全局对象寄存器顺序和atexit寄存器顺序使用相同的顺序表。还是全局对象顺序和atexit顺序没有

python - 在 Python 中调用 atexit 回调时如何查找退出代码或原因?

我想知道Python脚本是否正确终止。为此,我使用atexit但问题是我不知道如何区分atexit是用sys.exit(0)还是非零或异常调用的。推理:如果程序正常结束,它什么也不做,但如果程序以异常结束或返回不同于零的错误代码(退出状态)我想触发一些Action。如果您想知道我为什么不使用try/finally是因为我想为导入公共(public)模块的十几个脚本添加相同的行为。我不想修改所有这些,而是​​想将atexit()hack添加到正在导入的模块中,并在所有这些模块中免费获得此行为。 最佳答案 您可以使用sys.except