-
gcc -g main.c -o main.out生成调试版本<br> gdb ./main.out 进行调试<br> gdb下list 或者 l 列出源代码 回车继续刚才的指令 或者 `继续输出 l 将源代码显示完整<br> start 开始调试 从main函数下面第一句开始<br> q 退出 print(p) a 查看a变量的值<br> n 进入下一行,还未执行<br> step(s) 进入函数中 bt 查看函数堆栈 f 1 跳到1这个栈查看全部
-
1.内存空间中栈和堆的空间是程序员可以更改的,但是代码段是不允许程序员更改的(代码段:程序编译后生成的机器码,双击运行后会直接加载运行)查看全部
-
1.指针的偏移要比直接用CPU控制地址总线还要高效!<br> 2.int *p;<br> //p[4]的意义是:指针p往下移动4格(中括号:偏移计算)!与数组有不同的意义!<br> p[4]=5;//指针p往下移动4个单位空间后的指向空间赋值5;<br> 3.int array[3] 声明的数组中array既是数组名,又是数组的首地址;所以<br> int *p;<br> p=array;<br> //p[n]和array[n]有相同的数值,在功能上可以相互转化。<br> 所以:可以说,数组能做的指针都可以做到;指针能做到的数组不一定能做到!<br> 原因:array作为一个数组,目的是存储,其指向的地址没必要改变,是常量;<br> 而p作为指针,目的是操作,是变量!<br> 4.char str[10];<br> scanf("%s",str);<br> 和scanf("%s",&str);有相同的功能,也就是说:&是多余的<br> 因为str是字符型数组名,也就是字符数组的首地址(本身就是地址当然不用取址符)查看全部
-
32位系统中指针占4个字节; 64位系统中指针占8个字节; 指针的本质就是一个地址查看全部
-
计算机内存模型: 1、系统内核; 2、栈内存; 3、自由可分配内存; 4、堆内存; 5、数据段; 6、代码段;查看全部
-
32位操作系统,地址总线为2的32次方(4G),所以支持的最大内存为4G查看全部
-
变量的本质是内存 指针本质就是存放地址的内存查看全部
-
字符串指针(char *str)指向的字符串存放在代码段,而字符数组(char str[])的字符串存放在栈中。 代码段不能被修改,只有在栈内存或者堆内存的数据才能修改。查看全部
-
内存分配查看全部
-
1. int quadraate(int a);是一个函数 int (*pquadrate)(int a)=&quadrate;则是指向这个函数的指针! int s=(*pquadrate)(a)可以调用函数! 2.一个指针变量*q 不加*号:P q 取出自己地址中存储的值(一个地址)。 加*号:P *q 取出指向地址中存储的值。查看全部
-
1.GCC会对内存变量分配进行优化:同一种变量类型会放到一块儿!<br> 2.静态变量、常量、全局变量存于内存的数据段(数据段位置高于代码段)。 3.64位计算机中:地址都是用64bit表示的,所以指针(存储地址)占64bit,即8字节。 注意图中:&pa -> &pb的确是增加了8个字节(16进制中满16进1); 同理:从de18 -> de20也是增加了8个字节。 4.栈区域(最接近系统控制的内存空间)保存的是函数的运行状态:函数执行到哪一个命令?每一个变量保存的什么值?等等 5.在代码段和数据段(区),内存是从低地址向高地址转移的,即:先声明的函数地址小,后声明的函数地址大;而在栈中,刚好相反。查看全部
-
1.区分<br> P &a;<br> P pa;<br> P &pa; 2.在标准的C语言中,不允许直接对内存地址进行操作,只能是对操作系统已经分配给的内存空间进行操作。(防止用户自己操作内存地址时侵吞系统内存或者其他程序的内存)查看全部
-
若某一个地址不足64位,只是表示残缺的尾数都是前面的0,比如:5685125即0000000005685125 1.注意地址和内存空间的对应。 2.64bit操作系统中0~0*7fffffffffff(11个f)是留给用户/程序员使用的,剩余的0*7fffffffffff~0*ffffffffffffffff是供操作系统调用的)。 3.用户的内存隔离:将应用程序和操作系统的内存隔离开是有好处的,使操作系统更加安全! 4.32bit的计算机最多使用4G的内存!查看全部
-
采集自:Ephone_Chan(略有改动) ,转载请注明 1.编译命令:gcc -g main.c -o main.out; 2.调试命令:gdb ./main.out; 3.调试器:(gdb)list:列出源代码;(gdb)break line-number:在指定行数打断点;(gdb)start:开启单步调试; (gdb)p a:打印a变量在内存中的情况;(gdb)n:执行到下一句;(gdb)s:进入函数内部;(gdb)bt:查看函数堆栈; (gdb)f 1:切换到编号为1的函数中;(gdb)q:退出调试; 4.回车键:继续执行上一条指令。 5.gdb命令 (1)x/10d 起始地址 从起始位置向后取10个值(10),以10进制输出(d) 例如: (gdb) x/6d 0×7fffffffde1c (2)*:到某个地址找个东西查看全部
-
字符串与指针查看全部
举报
0/150
提交
取消