为什么指针占用相同的内存?

11 浏览
0 Comments

为什么指针占用相同的内存?

当我在cplusplus上阅读关于指针的内容时,我看到了这句(引用的)话,并有几个问题:\n

\n每个指针都打算指向不同的数据类型,但实际上,它们都是指针,它们都很可能占用相同的内存空间(指针在内存中的大小取决于程序运行的平台)。\n

\n我有两个问题:\n

    \n

  1. 为什么它们会占用相同的内存空间?\n
  2. \n

  3. 为什么指针在内存中的大小取决于平台?\n
  4. \n

0
0 Comments

指针占用相同内存的原因是因为指针是地址,对象的地址是一个表示对象存储开始的虚拟内存中第一个字节的索引的数字。因此,不管对象类型如何,在给定的架构上,对象指针始终会占用相同的空间。

指针的大小取决于架构。最简单的例子是x86和x86_64。对于前者,需要32位来存储地址(程序的虚拟空间上限为2^32字节),而对于后者,地址空间可以扩展到2^64字节,因此需要64位的内存来存储一个字节地址,即指针。

值得一提的是,还有一种使用24位寻址的英特尔架构。早期的处理器可以使用16位指针。此外,指向数据的指针的大小可能与指向代码或函数的指针的大小不同。

为了解决这个问题,我们可以使用不同大小的指针来适应不同类型的对象。在某些情况下,可以使用较小的指针来节省内存空间。然而,这可能会导致一些额外的开销和复杂性,因为需要在不同类型的指针之间进行转换。

0
0 Comments

指针为什么占用相同的内存?

指针并不存储数据本身,而只是存储可以找到数据的地址。就像你可以将明信片寄往公寓和豪宅一样,一个大小适当的指针可以指向1个字节或1个TB的数据。

对于问题#2的解答,可以将国内寄送的明信片和国际寄送的明信片进行比较。后者需要额外的信息来寻址全世界,因此你需要一张明信片上多一行用于填写目标国家。同样,一个在最大内存地址空间较小的系统(4GB)上的指针只需要32位,但一旦需要寻址更大的内存空间,指针必须扩展以能够为每个字节分配唯一的地址。

原因:指针只存储数据的地址,而不是数据本身。因此,指针的大小不取决于数据的大小,而是取决于系统的最大内存地址空间。当需要寻址更大的内存空间时,指针必须扩展以能够分配唯一的地址给每个字节。

解决方法:如果需要寻址更大的内存空间,可以使用更大的指针类型,例如64位指针。这样可以提供更多的地址空间,以便为更多的字节分配唯一的地址。

0