c - c库函数如何存放在内存中?

标签 c memory operating-system

我非常了解函数如何存储在堆栈中。但是我找不到任何与操作系统如何管理库函数(例如 c 库)相关的信息。

例如,stdlib.h 中的 system()。 当 main 调用 system() 或任何其他 c 函数时,

它存储在哪里?它是否将另一个函数框架压入堆栈(我对此表示怀疑)?

还是存储在堆中? c库中是否有一张表存储每个函数的位置?如果是这样,这张表是什么时候 build 的? 我们怎么去那里?我们怎么回来?

如果我们创建我们的库,操作系统会以同样的方式对待它吗?

静态库和共享库在这个问题上有区别吗?

谁能用一个简单的例子解释一下?

提前谢谢你,这最近让我很困扰。

最佳答案

库函数与代码中定义的函数没有什么不同——它们只是提供时已经编译。函数的本地非静态数据存储在堆栈中,而不是函数本身。

对于静态库,对库代码的引用在构建时解析,并且代码本身包含在完全链接的可执行文件中 - 由链接器完成。

对于共享库或动态链接库,库代码在运行时由操作系统加载程序加载到内存中并链接到您的代码。

关于c - c库函数如何存放在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169730/

相关文章:

x86 - 在 x64 中完全不使用分段吗?

c - 为什么类型在 C 中的这个值交换代码中不匹配?

c - while 循环不继续,在 1 次迭代后退出

c++ - 从 SYSTEMTIME 到 time_t 的转换给出 UTC/GMT 时间

c++ - 最大的内存映射分配大小?

multithreading - 操作系统如何确定应为每个线程分配多少堆栈空间?

c - 使用 strtok_r 拆分可变数量的 token

JavaScript - 使用 new 关键字的标准

linux - DMA和内存映射IO有什么区别?

c++ - c中如何获取进程ID,getpid()没有实现