请问老师关于内存地址是怎么生成的
来源: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回答
-
常量区的地址在编译过程中生成可执行文件时会有专门的区域存放;编译器在生成变量是,对每一个变量会记录两个信息:一个是变量的位置,一个是变量的类型信息;所以能容易的找到和译码信息。
042020-03-22
相似问题