gpt4 book ai didi

c - 我应该把大数组放在栈上还是堆上?

转载 作者:太空宇宙 更新时间:2023-11-03 23:47:01 24 4
gpt4 key购买 nike

我正在用 C 语言开发一个多线程应用程序。我目前正在使用 40 个线程,每个线程使用一个大约 2Mb 的数组。

我目前正在动态分配这个数组,所以我这样做:

char *data = malloc(2097152 * sizeof(char));

这些线程正在为请求提供服务,因此每次有新请求进入时,都会不断地分配和释放这个数组。

一切正常,但我使用的是 valgrind 的 massif 工具,它显示我有时有 80Mb 的堆。所以我有点想知道,我会遇到堆碎片问题吗?我还在代码的其他位置分配了较小的内存块。

此外,静态数组对我有好处吗?我正在寻找提高我的表现的方法,我想知道这是否有帮助。但是,我担心这样做会导致堆栈溢出。堆栈中的 80Mb 似乎太大了......

有什么建议吗?我真的不知道堆/堆栈的大小太大了。

最佳答案

无论如何,您似乎正朝着这个方向前进,但您可以使用一些设计模式来帮助您实现这一目标。

首先是内存池 http://www.codeproject.com/Articles/27487/Why-to-use-memory-pool-and-how-to-implement-it这可用于消除分配和取消分配内存的开销。

其次,为了完整起见,我假设您也在创建线程

所以线程池,如果你有一个访问内存池的线程池,你应该被排序。 http://en.wikipedia.org/wiki/Thread_pool_pattern

希望这可以帮助您解决问题。

关于c - 我应该把大数组放在栈上还是堆上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30239619/

24 4 0
文章推荐: c - 从二叉搜索树构建哈夫曼树
文章推荐: javascript - "MVC"和 "Single Page Application"模板有什么区别?
文章推荐: node.js - 使用 Node.JS HTTP 服务器的工作流程
文章推荐: c# - 带有 List 的 JSON.NET 的 System.OutOfMemoryException