常量数组 int x[20]
会比动态数组 int * x = new int[20]
小吗,因为动态数组是一个指针,占用空间?还是常量大小的数组也是指针?为什么或为什么不?
另一个问题:我从来没有 100% 确定的事情是,在 32 位机器上,指针的长度是 32 位吗?当涉及到指针在 RAM 中的存储位置时,指针的处理方式是否与常规变量相同?
非常感谢您的帮助。
最佳答案
动态的会占用更多的内存;多少取决于指针的大小和内存分配器元数据的大小。
正如@Jonathan 所说,在任何现代机器上,32 位机器使用 32 位指针,并且指针与数据的处理方式没有显着差异(除了堆栈与堆之外)。较旧的机器(或者甚至是较新的机器,如果您在“实模式”中使用拆分指令和数据空间构建)将区分函数和数据指针,但不会区分它们本身所在的位置,而是它们指向的地址空间。
一些非常古老的机器和一些实验性架构——您可能永远不会遇到它们——实际上以不同的方式管理指针,有时甚至管理数据; Emacs 对整数的历史处理(窃取一位或多位供内部使用)反射(reflect)了在某些旧架构上使用“标记位”。您可能偶尔会遇到(大多数较旧的)程序,这些程序“知道”指针应该在 4 字节边界上对齐,并借用指针的底部 2 位用于其他目的(垃圾收集状态是一种常见用途)。
关于c++ - 指针变量大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5508848/