如何在C中获得不同内存段的地址范围?

如何在C中获得不同内存段的地址范围?,c,C,说: C程序的典型内存表示由以下部分组成 文本段 初始化数据段 未初始化的数据段 堆叠 堆 但是,如何获取每个部分的开始地址和结束地址?获取每个内存段的开始和结束地址的简单方法是合并一个链接器命令文件,并在该文件中在每个内存段的开始和结束处放置一个标签 对于gcc(和ld),此链接应告诉您需要了解的所有信息: https://www.math.utah.edu/docs/info/ld_3.html您为什么需要这些信息?文本段是您的代码。初始化的数据段由所有初始化的全局变量的初始值填充。为未初始

说:

C程序的典型内存表示由以下部分组成

  • 文本段
  • 初始化数据段
  • 未初始化的数据段
  • 堆叠

  • 但是,如何获取每个部分的开始地址和结束地址?

    获取每个内存段的开始和结束地址的简单方法是合并一个链接器命令文件,并在该文件中在每个内存段的开始和结束处放置一个标签

    对于
    gcc
    (和ld),此链接应告诉您需要了解的所有信息:


    https://www.math.utah.edu/docs/info/ld_3.html

    您为什么需要这些信息?文本段是您的代码。初始化的数据段由所有初始化的全局变量的初始值填充。为未初始化的数据段分配足够的空间,用于所有没有初始值的全局变量。堆栈和堆是动态管理的(堆栈由系统管理,堆是通过内存分配实现的,例如malloc()/free()或底层brk()/cbrk()调用。这是高度实现定义的。它取决于操作系统,也可能取决于编译器。如果不识别操作系统和编译器,就不可能有答案。如果您甚至没有意识到有必要指定操作系统和编译器,那么无论您认为需要它的原因是什么,这一定是错误的原因。