- 堆区,编译器自动分配释放,例如函数参数、局部变量。
- 栈区,手动分配释放,malloc/free,new/delete。
- 全局区、静态区,初始化的和未初始化的放在不同的地方。
- 字符串常量区
- 代码区
char * p1 = "123456" 和 char p2[] = "123456" 的区别。
char * p1 = "123456" 直接mov全局变量的值。
mov dword ptr [ebp-10h],offset string "123456" (00422f7c)
char p2[] = "123456" 先mov到寄存器,再从寄存器mov到该位置。
mov eax,[string "123456" (0042201c)]
mov dword ptr [ebp-18h],eax
mov cx,word ptr [string "123456"+4 (00422020)]
mov word ptr [ebp-14h],cx
mov dl,byte ptr [string "123456"+6 (00422022)]
mov byte ptr [ebp-12h],dl
p1[0] = ‘a’是错误的,因为它实际上是全局区的常量指针。
本文详细解析了计算机内存的不同区域,包括堆区与栈区的特点及使用方式,并解释了全局区、静态区、字符串常量区和代码区的作用。通过具体实例说明了char指针与数组在内存中的区别。

7万+

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



