1.打开compiler explorer,查看汇编指令。

2.由于CPU不能直接访问内存地址,需要通过寄存器,配合方括号,间接访问内存。根据指令集,rip寄存器存放着CPU的下一条指令的地址。变量a的地址就是0x401114 + 0x2f18 = 0x40402c

总结:变量不过是内存地址的别名

3.底层查看类型的字节大小。a的地址:40402c;b的地址:404030;c的地址:404034。可以看出int在底层占用四个字节的内存空间。short两个字节。char一个字节。



4.局部变量



总结:
1.每一个变量,都对应一个内存空间。
2.变量的内省,决定了它占用内存空间的长度。
3.全局变量,静态变量占用的内存地址是全局唯一的,不会随程序的运行而变化。
4.临时变量是栈变量,变量的值,有有效期的限制,变量的地址,会因为不同线程调用而不同,在同一个线程,也会因为调用轨迹不同而不同。
本文探讨了如何通过compiler explorer查看汇编指令,揭示了CPU如何通过寄存器间接访问内存中的变量。详细分析了变量在内存中的布局,指出每个变量对应唯一的内存空间,并根据变量a、b、c的地址推断出int、short、char的字节大小。同时,总结了全局变量和局部变量的内存分配特点,强调了它们在内存中占用的空间由其类型决定,且局部变量的生命周期和地址会受线程和调用轨迹影响。
1454

被折叠的 条评论
为什么被折叠?



