gcc有自动优化功能
gdb命令:
x/3d 地址:按照十进制d,连续显示3个(3)变量的地址(x),默认间隔为4个空格
gcc自动优化功能,会在编译的时候把同一个数据类型的变量放到相邻,a,b,i都是整型,具体谁前谁后不一定。在这个截图中显示:在栈内存里,a,i,b
gcc -g ./a.out
gdb ./a.out
start
list
定义数组的时候中括号内不能是变量i 。
(gdb)x/3d (十进制输出) 0x7ffffffffde14 (从de14开始显示)
x/ :显示多个地址命令 3 :显示3个地址 d :十进制输出变量数值 0x???表示从当前地址开始显示数值
如果 3 变为 4567 甚至更多的话,要注意不能够越界——超过定义的变量个数(类似于数组)
数组长度为常量,每一次定义的数组空间是固定的,声明的地址空间连续排放
x/3d 0x7ffffffffffffde14 从0x7ffffffffffffde14开始按10进制输出3个地址的内容,间隔4字节
gdb命令:x(打印内存值)/3(输出3个值)d(十进制显示) 0xffffff(开始地址)
用x命令可以每次输出多个, 格式:x/个数 d 地址
d十进制
在程序中使用了一个未被声明的变量所指向的内存空间,则会生成一个随机的值(代码幽灵-不可控)
程序中声明的同一种变量在内存中连续排列
x/3d 0xffffffffde14
"x/3d"输出从0xffffffffde14开始的内存的值,3表示输出三个,d表示用十进制