x86架构上的Linux内核的默认内存页面大小是4 KB,我想知道这是如何计算的,为什么?
这个简单的C程序很少在相同的调用深度终止:
#include <stdio.h>
#include <stdlib.h>
void recursive(unsigned int rec);
int main(void)
{
recursive(1);
return 0;
}
void recursive(unsigned int rec) {
printf("%u\n", rec);
recursive(rec + 1);
}
Run Code Online (Sandbox Code Playgroud)
这种混乱行为背后的原因是什么?
我正在使用fedora(16GiB ram,堆栈大小为8192),并使用cc编译而没有任何选项.
编辑
问题是更多,因为在Linux上,线程堆栈大小是固定的,并且给出了ulimit -s
什么会影响可用的堆栈大小,以便堆栈溢出并不总是出现在相同的调用深度?
编辑2 @BlueMoon总是在他的CentOS上看到相同的输出,而在我的Fedora上,堆栈为8M,我看到不同的输出(最后打印的整数261892或261845,或261826,或......)