请问老师关于内存地址是怎么生成的

来源:5-8 字符串的指针表示

Osuribaba

2020-03-22

比如有一条语句:
  char* str = “abc”;
通过visual studio我能知道他的汇编大概长这样:
  00AYYYYY mov dword ptr [str], offset string “abc” (0AXXXXXX)

如果我没理解错的话,这条汇编的意思应该是把常量区0AXXXXXX的值(abc)赋值给了常量区的str这个地址吧?
但是我想知道这个常量区的地址是谁来生成的呢?是c++的编译器么?如果是的话,那编译器是怎么知道哪块儿的地址属于常量区,哪些地址又不是常量区呢?

然后还有个问题,编译器是怎么把变量名和实际地址对应上的呢?就比如上面那个 str 变量,假设它在内存里的地址是 0x00acXXXX, 这个地址的值存了 “abc”,那之后比如我要 cout << str; 用到了这个 str 变量时候,为啥编译器就知道要去找 0x00acXXXX 这个地址呀?
谢谢老师。

写回答

1回答

quickzhao

2020-03-22

常量区的地址在编译过程中生成可执行文件时会有专门的区域存放;编译器在生成变量是,对每一个变量会记录两个信息:一个是变量的位置,一个是变量的类型信息;所以能容易的找到和译码信息。

0
4
Osuribaba
非常感谢!
2020-03-22
共4条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程