哪个段是分配库函数的内存?

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


静态链接

对于静态链接的程序,库代码与应用程序合并在一起,程序和库之间几乎所有的区别都会丢失,也就是说,每个对象最终都位于主程序中类似对象所在的同一节中。

动态链接

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

汽车

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

本地非自动

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

最后,库例程将与相同的malloc() (或其他)相关联,因此所有的堆分配将以同一组地址进行。


库函数的处理方式与其他链接模块的处理方式不同:它们的局部变量使用堆栈,动态分配的内存部分堆放在堆上。

链接地址: http://www.djcxy.com/p/79899.html

上一篇: In which segment is memory for library functions allocated?

下一篇: How do stack and registers work in assembler?