首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现内存池

实现内存池
EN

Stack Overflow用户
提问于 2016-07-09 12:37:01
回答 1查看 487关注 0票数 0

我想为嵌入式系统项目做一个内存池管理器。我想在一个.c文件(比如meminfo.gov.hk.c)中创建一个单独的头和相应的实现。这里我的疑问是,当我在这个文件中的函数实现中调用malloc()时,我实际使用的是哪个堆内存?

考虑到还有其他文件(例如foo1.c和foo2.c)使用头文件“meminfo.gov.hk.h”和meminfo.gov.hk.c中的相应函数。那么,当我同时编译和执行foo1.c和foo2.c时,它们对mempool中函数的调用会调用两个完全独立的堆还是同一个堆上的分配呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-09 12:56:33

游戏中有三个C源文件:mempool, foo1, foo2

.h文件是头文件,它描述了函数的“外观”以及它们的调用方式。

当您编译foo1foo2时,来自mempool.o的对象代码将静态地链接到它们中。

这样做之后,它们现在是“两个完全独立的程序”,这两个程序都包含相同的对象代码。

当这两个程序执行时,每个程序都有自己的私有堆。虽然它们都包含用于内存池管理的相同的对象代码,但它们彼此无关。

如果您确实希望程序真正“共享内存”,则必须使用指定的共享内存段。),您必须设计内存池管理器代码以查找、打开和正确使用该共享资源。再一次,这两个程序都将包含它们自己独立复制的内存池管理器的目标代码。

(提示:“这已经完成了。”您可以在像这样的地方找到完整的库,而不是自己开始定制的实现。)

=== 附加说明:

我还想顺便评论一下,第三种可能存在:动态加载的库。

当您采用这种方法时,对象代码将由应用程序在运行时加载,并且它不会成为使用它的应用程序的“一部分”对象代码。相反,他们可以使用它。此外,操作系统知道共享,可以识别共享的单个实例。It 允许一个通用的内存分配集“属于”该单个共享实例。操作系统(和版本,“历史与现代”,例如MS.)在这一点上各不相同。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38281866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档