C语言遇到的小问题
32为Linux主机下的C语言内存情况
----------------------------------------------------------- 4G(0xffff ffff)
内核空间 应用程序不许访问
------------------------------------------------------------ 0xC000 0000
栈空间 RW 局部变量保存位置
-------------------------------------------------------------
运行时堆空间 malloc
--------------------------------------------------------------
全局的数据空间 RW (初始化的(data)、未初始化的(bss)) data bss
代码段(只读) R code text
---------------------------------------------------------------0x0804 8000
---------------------
堆栈区内存大小,Windows下缺省值 2M,如果char够用,你就按照char去开,就只有int的1/4啦,不计算好递归次数或者局部变量大小,若评测机没有特殊配置,您将get stackoverflow(爆栈)
当我们malloc(C++为new)也是能用的,他是在堆里进行调用
bss(block started by symbol)段是用来存放已经初始化为0或者未初始化的全局变量的内存区域
0xC0000000 3GB,以上用于内核、以下用于用户
0x08048000 是加载的地址,0x08048000 以下的地址范围 会用来做 single second-level page table,占用内存可以减少
图片版
printf("%s",s[i]) 错误
printf("%s",s[i])不能运行的原因也在这里,给定字符就会访问字符所在ascii值的内存空间,就炸了
导致程序运行崩溃有以下几种可能:非法内存地址访问,访问越界,堆栈溢出
栈(sp),函数调用时入栈的顺序 是参数(arg) 父函数地址(可以回跳回去) 局部变量(local variable)
case 's': s = va_arg(args, char *); if (!s) s = "<NULL>"; len = strnlen(s, precision); if (!(flags & LEFT)) while (len < field_width--) *str++ = ' '; for (i = 0; i < len; ++i) *str++ = *s++; while (len < field_width--) *str++ = ' ';
打印指针请使用%p,64位机使用%x就出错了,请使用自己的类型
本文来自博客园,作者:暴力都不会的蒟蒻,转载请注明原文链接:https://www.cnblogs.com/BobHuang/p/10810143.html