【发布时间】:2019-10-24 11:28:30
【问题描述】:
我有一个为假设的 CPU 编写的结构:
struct s {
int m;
void (*foo[13])(int);
char s;
};
如果地址空间是 63 位宽,如果一个字节是 21 位(char 是 21 位),short、int 和 long 是 42 位,long long 是 168 位,我是否将指针放入 long long 类型,因为它们不适合 char、short、int 或 long?我需要 13*long long(168 位)来存储 13 个函数指针吗?
【问题讨论】:
-
你试过调用
printf("%zx", sizeof(struct s))吗? -
什么平台有 21 位字符和 63 位指针?
-
显然,这是一个家庭作业,并使用一个假设的 CPU。由于地址是 63 位或每个 21 位的 3 个字节,因此您可能需要 3x13= 39 个字节的数组。但不能保证函数指针与对象指针的大小相同。但给出的信息并未表明函数指针的任何替代大小。
-
这是一个假设的 CPU 这个问题似乎没有明确说明,因此 IMO 没有“正确”的答案。函数指针的对齐限制是什么?例如,它们是否必须在 4 字节(84 位)边界上对齐?
-
指针的大小不必与任何现有的整数类型完全相同。函数指针可以是任意大小。我可以在这个平台上提出一个合理的实现,它有 1 字节宽的函数指针。或 2 或 3 个字节。问题中根本没有足够的数据。您的教授可能会也可能不会高兴听到这个消息。