我应该在堆栈或堆上放置大型数组吗?

时间:2015-05-14 14:13:59

标签: c multithreading stack heap

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

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

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

这些线程正在处理请求,因此每次有新请求进入时,此阵列都会不断分配和免费。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

第二,我将假设您为了完整性而创建线程

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

希望这可以帮助您就如何解决问题提出一些建议。