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

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

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

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

这些线程正在处理请求,因此每次有新的请求进入时,此数组都会不断分配和释放。

所有工作正常,但我使用valgrind的地块工具,它显示我有时有80Mb的堆。 所以我有点想知道,我会有堆碎片问题吗? 我还在我的代码的其他地方分配了更小的内存块。

另外,我会从静态数组中获益吗? 我正在寻找提高我的表现的方法,我想知道这是否会有所帮助。 但是,我害怕这样做,并最终导致堆栈溢出。 堆栈中的80Mb似乎太大了...

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


无论如何,你似乎都朝这个方向前进,但是有一些设计模式可以用来帮助你。

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

第二我会假设你也在为了完整性而创建线程

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

希望这会给你一些关于如何解决你的问题的想法。

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

上一篇: Should I put large arrays on stack or heap?

下一篇: Performance problems using OpenMP in nested loops