我已经读过Linux上的"标准"和初始堆栈大小约为8MB,Windows大约为1MB.
但堆分配如何工作?操作系统是否为进程堆设置了"虚拟"大小,就像它对已提交和保留内存的堆栈一样?
编辑:我已经知道printf不是类型安全我只是在寻找一个关于究竟是什么发生的探索(我的意思是描述未定义的行为).
为什么我在第二个printf中打印"7",程序打印9.334354.我知道如果我不写7.0,这将不会被打印,但为什么要写第一个数字呢?
#include <stdio.h>
int main()
{
printf("%.2f\n", 9.334354);
printf("%.5f\n", 7);
printf("%03d\n", 9);
getchar();
}
Run Code Online (Sandbox Code Playgroud)
这是输出
9.33
9.33435
009
Run Code Online (Sandbox Code Playgroud) 联合的大小是95个字节,为什么如果我尝试在a处访问102位置,不会引发异常?或者我只是覆盖了另一个内存位置?
#include<stdio.h>
union u{
char a[95];
int b;
char *c;
};
union u u1;
int main()
{
u1.a[102] = 'b';
printf("%c",u1.a[102]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)