c - 库函数的内存分配在哪个段?

标签 c linker memory-management

自动变量/局部变量入栈的方式,动态分配的对象/数据类型入栈的方式;库函数调用(比如 printf())的内存分配在哪里。在哪个 segmentation 市场?

最佳答案

静态链接

对于静态链接的程序,库代码与应用程序合并在一起,程序和库之间的几乎所有区别都丢失了,即每个对象最终都位于主程序中类似对象所占据的同一部分.

动态链接

对于动态链接的程序,如果一个对象是可写的而不是自动的,那么内存页面将被分配到使用该库的每个进程中,并且数据部分(或多个部分)将只存在于动态加载的库中。

汽车

对于主程序、静态链接库函数和动态库,自动变量在堆栈上的分配方式相同。链接过程在这方面没有任何作用,相反,生成的代码只是根据每个例程的本地自动空间要求从堆栈指针中减去特定数量。

本地非自动

局部静态变量由链接器以模块静态和全局地址的方式分配,它们只是没有全局可链接的名称。

最后,库例程将链接到相同的 malloc()(或其他),因此所有堆分配都将以相同的方式从同一组地址进行。

关于c - 库函数的内存分配在哪个段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3789107/

相关文章:

类静态 constexpr 的 C++ 链接器错误

ios - 使用 UIImagePickerController 减少内存使用

objective-c - Cocoa 示例 - 为什么不需要保留或释放消息

android - 如何为android实现mbtowc? (或者,理想情况下,如何不这样做?)

c++ - 链接具有内联函数的静态库时出现问题

linker - OpenCL undefined reference ,但 lib 文件位于正确位置

objective-c - 分配的对象的潜在泄漏 - 不知道为什么

c - BCC 中的内联汇编(Bruce 的 C 编译器)- 如何使用 C 变量?

c - Linux 中移动堆栈并保留一半可寻址空间

c - 在 C 中使用指针将数组传递给函数?