C++中指针数组的内存占用问题及Int *ptr = new int[3];的内存疑惑
嘿,我来帮你把这两个疑问理得明明白白:
一、new int[3]创建的数组在内存中占用的字节数
在32位系统环境下,int类型的大小通常是4字节(这是C++主流编译器的标准实现,除非有特殊编译选项修改)。那3个int元素组成的数组,实际占用的内存字节数就是:3 * sizeof(int) = 3 * 4 = 12字节
补充一句:
new分配数组时,底层可能会额外分配一点点内存用来存储数组长度(方便后续delete[]正确释放所有元素),但这部分属于系统管理的开销,不算数组本身的占用空间——如果单说数组元素占用的RAM,就是12字节。
二、32位系统下指针本身的内存占用
你这里大概率混淆了32位和64位系统的差异:
- 在32位系统中,指针变量的大小是4字节——因为32位地址总线的寻址范围是2^32,用4字节就能存下所有内存地址。
- 而你提到的“ptr大小为8字节”,是64位系统的情况,对应64位的地址空间。
所以回到你的问题:在32位系统下,仅指针ptr本身(完全不包含它指向的数组元素)占用的总字节数是4字节,不是8字节。指针变量的大小只和系统位数有关,和它指向的对象类型、大小都没关系——哪怕它指向一个1000个元素的数组,指针本身还是只占4字节(32位)或8字节(64位)。
内容的提问来源于stack exchange,提问作者user14201328
相关产品推荐
相关产品推荐

