指向 4 个字节的双精度指针如何指向 8 个字节的双精度?
How can a pointer to double that is 4 Bytes point to double that is 8 Bytes?
我有一个天真的问题:
A 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
那么4 Bytes
的double
指针如何指向8 Bytes
(double object
)?
在 64 位系统上,指针的大小为 8 字节,因此可以。这是否意味着 double
在 64 位系统上比在 32 位系统上更有效?
问:那么4字节的double指针如何指向8字节(double对象)?
答:因为“指针”与“指向”的不同。
想一想:你的“指针”可以指向一个双精度...一个浮点...一个字符。
问:这是否意味着 double 在 64 位系统上比在 32 位系统上更有效?谢谢!
A:不是,只是说64位机器可以直接访问更大的地址space.
这里有一个很好的指针教程:
Pointers in C Programming: What is Pointer, Types & Examples
这里有一篇关于“内存寻址”的好文章:
我有一个天真的问题:
A 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
那么
4 Bytes
的double
指针如何指向8 Bytes
(double object
)?在 64 位系统上,指针的大小为 8 字节,因此可以。这是否意味着
double
在 64 位系统上比在 32 位系统上更有效?
问:那么4字节的double指针如何指向8字节(double对象)?
答:因为“指针”与“指向”的不同。
想一想:你的“指针”可以指向一个双精度...一个浮点...一个字符。
问:这是否意味着 double 在 64 位系统上比在 32 位系统上更有效?谢谢!
A:不是,只是说64位机器可以直接访问更大的地址space.
这里有一个很好的指针教程:
Pointers in C Programming: What is Pointer, Types & Examples
这里有一篇关于“内存寻址”的好文章: