我正在运行一个定制的2.6.27内核,我刚刚注意到在分段错误期间生成的核心文件比为进程设置的硬核心文件大小限制要大。
更奇怪的是,核心文件有时只被截断(但没有被ulimit设置的限制)。
例如,下面是我将尝试并崩溃的程序:
int main(int argc, char **argv)
{
// Get the hard and soft limit from command line
struct rlimit new = {atoi(argv[1]), atoi(argv[1])};
// Create some memory so as to beef up t
为了解释我的问题,我将首先提供一些代码,并解释它的功能:
% 1 1 65532{}for % cut off on mac with font set
% 1 1 99996{}for % cut off on mac without font set
% 1 1 300048{}for % cut off on linux with font set
% 1 1 300368{}for % cut off on linux without font set
% /Times-Roman findfont 10 scalefont setfont
showpage
当我
我的环境是gcc,C++,Linux。当我的应用程序进行一些数据计算时,它可能需要一个“大”(可能是几个MBs)内存数来存储数据、计算结果和其他东西。我得到了一些使用新,delete的代码来完成这个任务。由于在某些函数作用域之外没有所有权,所以我认为所有这些内存都可以在堆栈中分配。
问题是,默认的堆栈大小(我的系统中的8192 be )可能不够。我可能需要为这些堆栈分配更改堆栈大小。此外,如果以后需要更多的数据,我可能需要再次扩展堆栈大小。
那么,扩展堆栈大小是一种选择吗?由于它不能分配给特定的功能,它将如何影响整个应用程序?在堆栈上分配数据而不是堆上分配数据真的是的改进吗?
关于pthread_attr_setstacksize 的手册页
A thread's stack size is fixed at the time of thread creation. Only the main thread can dynamically grow its stack.
我对linux线程的理解是,主线程堆栈的大小仅限于主线程创建上的ulimit -s值。虽然它可以根据堆栈使用的需要映射到virt,但其大小不再增长。
动态增长在这里意味着什么?这是否意味着主线程堆栈的大小可以超过ulimit -s