Linux C 2——内存

gdb简单指令

  1. 若要调试一个程序,需要使用“cc -g xx.c”,使用 -g 编译得到的.out程序才可以被调试
  2. 使用“gdb xx.out”开始调试一个程序
  3. l / list : 显示源代码(直接回车表示继续执行上一个命令,下同)
  4. start : 启动调试,程序默认停留在main入口处,为单步调试
  5. r / run :启动调试,直接执行到下一个断点处
  6. b / break : 添加断点
  7. n / next : 执行下一行,但是不进入被调用函数内部
  8. s / step :执行下一步,进入被调用函数内部
  9. p / print :打印某个变量的值
  10. x/nd :显示内存中的n个值(默认4字节为一个值),n为个数,d为显示方式 ,此处d表示10进制显示
  11. bt :查看函数堆栈
  12. f :切换函数栈中的函数,并不改变执行过程,但可以查询另一个函数中的变量值
  13. q :退出调试

内存规划

C语言程序运行时会占用如下图的几个分区:
内存分配图
其中系统内核区主要由操作系统所使用,暂不讨论,其他分区的作用如下:

  1. 栈(stack):存储被调用函数的局部变量、函数参数等信息,每次函数调用时,存放返回地址和调用者信息,用于保存/恢复现场,由编译器管理,自上向下增长,可占用自由分配区;
  2. 堆(heap):存放运行时被动态分配内存的变量,如使用malloc/free函数即分配此部分内存,程序员管理,可自下向上增长占用自由分配区;
  3. 数据段(data segment):声明的全局变量,静态变量以及常量会存放在数据段(如果细分,数据段之上还存在BSS段,BSS段存放未初始化的全局变量,执行时被赋值0,数据段存放已初始化的全局变量);
  4. 代码段(code/text segment):应用程序被编译后生成机器码(二进制指令),在执行程序时,这些机器码被存放在代码段,代码段内容通常只读;此段也会存放常量字符串;

猜你喜欢

转载自blog.csdn.net/tss1993/article/details/85230425