当前位置: 首页 > news >正文

CPU眼里的C/C++:1.2 查看变量和函数在内存中的存储位置

写一个很简单的 c++ 代码,打印一些“地址”, 也就是变量、函数的“存储位置”:当程序被加载到内存后,它们具体是存在哪里,可以用精确的数值来表示,这就是内存地址。

https://godbolt.org/z/Ghh9ThY5Y
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>

char a[] = "password";

int main()
{
    int b = 2;
    int* c = (int*)malloc(4);
    *c = 0x11223344;
    printf("%p, %p, %p, %p\n", &a, &b, c, main);
}
ASM generation compiler returned: 0
Execution build compiler returned: 0
Program returned: 0
0x404038, 0x7fff019b0e64, 0x2377eb0, 0x401140

对应的内存地址,按从高到低,顺如如下(不同的GLIBC版本,得到的具体值会有差异,但是整体趋势是固定的:stack地址从高往低增长(🔽), .text 和 .data 在地址比较低的地方, heap 则从地址较低的地方往地址较高的地方增长(🔼)

b             (0x404038)    // stack
c             (0x2377eb0)  // heap
a             (0x404038)  // .data
main          (0x401140) // .text

相关文章:

  • 黑豹程序员-架构师学习路线图-百科:API接口测试工具Postman
  • 【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决
  • mysql全文索引
  • mybatis书写
  • 怎么保护公司文件安全
  • java中的异常,以及出现异常后的处理【try,catch,finally】
  • 多线程进阶
  • 基于yolov5的目标检测和双目测距
  • python sqlalchemy(ORM)- 02 表关系
  • ESP32C3 LuatOS TM1650②动态显示累加整数
  • *#220807#你还记得么 国产手机*#220807#隐藏的功能
  • 【M365运维】给从本地同步到O365的DL添加 Send As权限
  • windows开机自启动和忘记密码-备忘
  • 【webpack】wabpack5 知识梳理
  • Linux使用wget下载文件时报错
  • 大数据之LibrA数据库常见术语(四)
  • Android 指定有线网或Wifi进行网络请求
  • RSA加密算法Python实现
  • 5G技术的飞速发展:连接未来
  • Centos7单节点快速安装fastdfs
  • 上海一隧道成“王家卫风”网红拍照点?交管部门已专项整治,一人被处罚
  • 1309家县医院已达到三级医院能力,还有哪些短板要补?
  • 全国治安管理工作视频会召开
  • 国台办:不管台湾地区领导人讲什么,都改变不了台湾是中国一部分的地位和事实
  • 顶刊论文现“飙脏话辱骂第二作者”,期刊回应:正积极调查
  • 22国外长联合声明:要求以方立即允许全面恢复对加沙援助