4 字节的双精度指针如何指向 8 字节的双精度指针?

我有一个幼稚的问题:

double即使在 32 位机器上,A也是 8 字节long long,而且我们知道该实现的指针大小仅为 4 字节。因为这与处理器的寄存器大小有关。因此处理器寄存器必须能够寻址任何数据类型。

这是我的代码,使用编译器标志运行-m32

std::cout << "size of double: " << sizeof(double) << '\n'; // 8
std::cout << "size of double*: " << sizeof(double*) << '\n'; // 4

回答

问:那么4 Bytes 的double 指针怎么能指向8 Bytes(double 对象)呢?

答:因为“指针”与“指向”不同。

想一想:你的“指针”可以指向一个双精度......一个浮点数......一个字符。

问:这是否意味着 double 在 64 位系统上比在 32 位系统上更有效?谢谢!

A: 不是。它只是意味着 64 位机器可以直接访问更大的地址空间

这是一个关于指针的好教程:

C 编程中的指针:什么是指针、类型和示例

这是一篇关于“内存寻址”的好文章:

虚拟地址空间

  • 请阅读我引用的文章。简短回答:不可以。一个 8 位 CPU 一次最多可以寻址 256 个字节的内存。最早的 PC 是 8 位的;它们只能容纳微小的程序。最初的 IBM PC 是 16 位的,并支持“段”。它允许 DOS 程序使用一整兆字节的内存。今天的处理器可以容纳千兆字节或艾字节的内存。这就是区别...
  • @phuclv - 我试图不让答案“过于复杂”。但你是对的。我提到的“早期 PC”(例如 Apple II 和 Commodore PET)使用 8 位摩托罗拉 6502 处理器。但是它们有一个 16 位地址总线,因此可以访问 64K 的 RAM。不同的“地址模式”允许 CPU 支持 16 位寻址。看[这里](https://en.wikipedia.org/wiki/MOS_Technology_6502#Addressing)或[这里](https://people.cs.umass.edu/~verts/cmpsci201/spr_2004/Lecture_02_2004-01-30_The_6502_processor .pdf) 了解详情。

以上是4 字节的双精度指针如何指向 8 字节的双精度指针?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>