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