【问题标题】:How can a pointer to double that is 4 Bytes point to double that is 8 Bytes?指向 4 字节的 double 的指针如何指向 8 字节的 double?
【发布时间】:2021-10-28 19:18:14
【问题描述】:

我有这个幼稚的问题:

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

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

std::cout << "size of double: " << sizeof(double) << '\n'; // 8
std::cout << "size of double*: " << sizeof(double*) << '\n'; // 4
  • 那么一个指向double4 Bytes 的指针如何指向8 Bytes (double object)?

  • 在 64 位系统上,指针的大小是 8 字节,所以没问题。这是否意味着double 在 64 位系统上比在 32 位系统上更有效?

【问题讨论】:

标签: c++ pointers double 32bit-64bit


【解决方案1】:

问:那么 4 Bytes 的 double 指针如何指向 8 Bytes(双精度对象)?

答:因为“指针”不同于“指向”的东西。

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

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

A:不会。只是表示64位机可以直接访问更大的地址空间

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

Pointers in C Programming: What is Pointer, Types & Examples

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

Virtual address spaces

【讨论】:

  • "A: 不,只是表示64位机器可以直接访问更大的地址空间。"这是否意味着直接访问比 32 位实现更有效?
  • 请阅读我引用的文章。简短的回答:不。一个 8 位 CPU 一次最多可以寻址 256 字节的内存。最早的 PC 是 8 位的;它们只能容纳微小的程序。最初的 IBM PC 是 16 位的,并且支持“段”。它允许 DOS 程序使用一整兆字节的内存。今天的处理器可以容纳千兆字节或艾字节的内存。这就是区别......
  • @paulsm4 大多数 8 位 MCU 可以寻址超过 256 字节的内存,至少在指令空间中How can 8-bit processor support more than 256 bytes of RAM?
  • @phuclv - 我试图不让答案“过于复杂”。但你是对的。我提到的“早期 PC”(例如 Apple II 和 Commodore PET)使用 8 位 Motorola 6502 处理器。但是它们有一个 16 位地址总线,因此可以访问 64K 的 RAM。不同的“地址模式”允许 CPU 支持 16 位寻址。详情请查看herehere
猜你喜欢
  • 2013-10-10
  • 2021-02-19
  • 2018-05-10
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多