当前位置: 首页 > 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
http://www.dtcms.com/a/2986.html

相关文章:

  • 黑豹程序员-架构师学习路线图-百科: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
  • MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)
  • 智能巡检系统怎么用?如何让设备巡检维护更高效?
  • SpringBoot整合knife4j
  • Dockerfile
  • 编译无法加载主类的问题
  • 【前端】Layui小功能收集整理
  • Android Kotlin 协程初探 | 京东物流技术团队
  • 如何在不恢复出厂设置的情况下解锁 Android 手机密码?
  • JavaScript 原型链污染
  • 在pyqt中,self.label_3.setScaledContents(True),论lable打开内容尺寸适应的重要性