我正在用C开发一个多线程应用程序。我目前正在使用40个线程,每个线程使用大约2Mb的数组。
我目前正在动态分配这个数组,所以我这样做:
char *data = malloc(2097152 * sizeof(char));
这些线程正在处理请求,因此每次有新请求进入时,此阵列都会不断分配和免费。
一切正常,但我使用的是valgrind的massif工具,它告诉我,我有时会有80Mb的堆。所以我有点疑惑,我会有堆碎片问题吗?我还在代码的其他位置分配了较小的内存块。
另外,我可以从静态数组中受益吗?我正在寻找改善我的表现的方法,我想知道这是否会有所帮助。但是,我害怕这样做并最终导致堆栈溢出。堆栈中的80Mb似乎太大了......
有什么建议吗?我真的不知道堆/堆的大小太大了。
答案 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
希望这可以帮助您就如何解决问题提出一些建议。