查看虚拟内存地址空间的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35440678/article/details/80099209

列表:

  • 地址空间分为哪几段?
  • 每一段存放什么?
  • 怎么查看

前言

操作系统对每个进程都分配了完整的虚拟内存地址空间。进程会把整个地址空间分成多个区间来使用。堆和栈,是程序员最熟悉的部分了,除了这两块区间外,还有其他的内存区间,用来存储代码、静态、全局变量等等。

一图胜千言

这里写图片描述

地址空间分为哪几段?

地址空间分析,从低到高:
1. TEXT段:整个程序的代码,以及所有的常量;这部分内存是是固定大小的,只读的
2. DATA段:初始化为非零值的全局变量,全局变量!!
3. BSS段:初始化为0或未初始化的全局变量和静态变量
4. HEAP(堆空间):动态内存区域,使用malloc或new申请的内存
5. 未使用的内存
6. STACK(栈空间):局部变量、参数、返回值都存在这里,函数调用开始会参数入栈、局部变量入栈;调用结束依次出栈

怎么查看每个段的内容

地址空间分那么多段,有没有方法能看到每个段的信息呢?
有办法,通过objdumpreadelf两个命令可以看到一个目标文件每个段的信息。

//1、生成目标文件
gcc -c file.c
//2、查看
objdump -h file.o

objdump -x -s -d file.o

//如何查看虚表?
objdump -s -x -d  CMakeFiles/hello.dir/virtual_class.cpp.o | c++filt  | grep vtable

显示如下:

这里写图片描述

参考

猜你喜欢

转载自blog.csdn.net/qq_35440678/article/details/80099209
今日推荐