c++ - 指针变量大小

标签 c++ arrays pointers

常量数组 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/

相关文章:

c++ - 来自 C++ 源代码的统计信息

c++ - 如何修复 cpprestsdk 中的 "error in ssl handshake"?

java - 当作为字符串传递时,为什么相同的数组不被视为相等?

javascript - 如何在 Javascript 中针对每个索引将某个数组拆分为多个数组

c - 相同类型结构的指针内的结构

c++ - 在不丢失分隔符的情况下拆分字符串

我可以像这样初始化一个空的 2D C 字符串吗?

c++ - 了解堆栈、堆和内存管理

c - 为什么不打印数组?

c++ - 如何开发适用于 Symbian OS V2 的应用程序?