3.10.1 理解指针

这里补充一下课上讲的关于内存的东西
虽然x86-64理论上的内存大小为\(2^{64}\),但实际上只有\(2^{47}\),于是内存的起始位置为0x00007fffffffffff(注意内存的地址是逐渐减小的,所以这是起始地址而不是结束地址;参考栈)
image

  • Stack
    • 如图所示,运行时栈
    • 大小不能超过8MB,如果超过了就RE了
  • Text/Shared Libraries
    • 就是各种可执行文件存放的地方
  • Data
    • Data叫做数据区
    • 一个数据段是在数据区中用来存放程序开始时分配的数据的,声明的全局变量都在这个数据段中
  • Heap
    • 用来存放malloc()或者相关函数申请的变量
    • 如果每次申请之后不释放的话,堆区所消耗的内存就会越来越大

image
各个量的分配如下(可以通过GDB调试程序获得)
image

  • 如果访问了两个堆之间的白色区域,就会产生RE
  • 如果两个堆之前相遇(也就是空间被分配完了),那么malloc将不会再分配内存
posted @ 2025-07-23 14:01  最爱丁珰  阅读(8)  评论(0)    收藏  举报