增加Solaris应用程序中的堆大小

时间:2017-09-11 12:21:47

标签: c multithreading memory-management heap-memory solaris-10

我在Solaris上运行了多线程C应用程序。在几个实例中,我得到的内存分配失败如下:

 --- called from signal handler with signal 11 (SIGSEGV) ---
 00130804 allocate__t24__default_alloc_template2b0i0Ui (20, 20, 30ab08, 1, 1, 0) + a4
 0011e304 __nw__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b
0i0_3RepUiUi (10, 10, 0, 0, 0, 0) + 14
 0011e344 create__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template
2b0i0_3RepUi (a, a, 0, 0, 0, 0) + 24
 0011e708 replace__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2
b0i0UiUiPCcUi (f9fff608, 0, ffffffff, f9fff6e0, a, 80808080) + 114
 0013453c assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b
0i0PCcUi (f9fff608, f9fff6e0, a, 0, 0, 0) + 24
 001332c4 assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b
0i0PCc (f9fff608, f9fff6e0, 0, 0, 9fe550, ff1b03d8) + 24
 0012ffbc __t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_template2b0i0PCc
 (f9fff608, f9fff6e0, ff1b554c, 1a, ff1b4fe8, ff1b5670) + 28

由于内存分配失败,我是否可以增加进程使用的堆区域?另外,我是否可以将alloc使用的默认basic_string函数替换为具有线程安全变体或自定义alloc函数?

进一步信息:跨线程不共享字符串。每个线程处理其自己的数据集,该数据集具有动态增长的字符串向量,最终导致此alloc失败。当线程数增加时以及由于高容量数据导致矢量大小更多时,会出现问题。需要仔细混合堆栈和堆。需要有关如何增加默认堆和堆栈大小(任一)的信息。

0 个答案:

没有答案