比如有一条语句:
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 这个地址呀?
谢谢老师。