【发布时间】:2011-04-24 11:52:02
【问题描述】:
假设我有一个定义如下的类
class foo
{
char [10] bar;
}
假设没有填充/打包,在 64 位环境中与 32 位环境相比,此类的大小有何不同。
我相信 64 位版本的类的长度会多 4 个字节,因为:
- 该类必须包含一个 char* 才能指向数组 bar 的开头
- char* 在 64 位环境中为 8 个字节,而在 32 位环境中为 4 个字节
我说的对吗?
谢谢!
关于数组实际工作原理的进一步问题 如果声明数组时没有存储指针,那怎么能从数组名中得到地址,然后做bar[0]、bar[1]之类的事情呢?
【问题讨论】:
-
如果没有存储指针,怎么能从数组名bar中得到一个地址,然后做bar[0]、bar[1]之类的事情?
-
因为 C++ 会隐式地将其视为指向 bar 的指针。基本上,你可以像
&bar[0]一样使用bar。 -
"如果
int i;不存储地址,你怎么能从&i这样的表达式中得到地址?"正在问你刚才问的完全相同的问题。一个数组有一个地址,因为它在内存中的某个地方,就像不在寄存器中的所有其他东西一样(而且我已经很久没有看到register关键字了,因为编译器无论如何都做得更好)。我知道这很令人困惑,因为您可以使用数组索引语法来取消引用指针。这是关于 C 和 C++ 更令人困惑的问题之一。
标签: c++ 64-bit 32-bit 32bit-64bit