【发布时间】:2013-09-10 09:58:53
【问题描述】:
假设我只会使用具有明确宽度的类型,例如没有 int 但有 int32、uint16 等...可以安全地假设:
A byte will always take 8 bits and will be 8 bit aligned
A short will always take 16 bits and will be 16 bit aligned
An int will always take 32 bits and will be 32 bit aligned
A long int will always take 64 bits and will be 64 bit aligned
A float will always take 32 bits and will be 32 bit aligned
A double will always take 64 bits and will be 64 bit aligned
--- 并且如果满足以下条件,这三个将最有效:
A 64bit SIMD datatype will always be 8 byte aligned
A 128bit SIMD datatype will always be 16 byte aligned
A 256bit SIMD datatype will always be 32 byte aligned
---最后:
A cache page will always be multiple of 32 bytes // e.g. 32 or 64 bytes
当然,我并不暗示 每个 硬件平台,我只关心 x86/x64 和 ARM v7/v8
【问题讨论】:
-
抱歉,您的问题似乎自相矛盾:首先您说您将只使用具有明确宽度的类型,然后您询问“An int 将始终占用 32 位...” .
-
@LorenzoDonati - 在明确声明我不会使用没有明确宽度的类型之后,
int是如何模棱两可的?它在问题的开头声明并且在其整个范围内有效,这就是为什么int暗示 32 位 int 的原因,顺便说一句,即使不使用显式宽度,大多数现代编译器也是如此。 -
@user2341104 如果你不打算使用
int,为什么要问int?而且我相信long int在 Windows 上是 32 位的。 -
@Angew - 我只是按升序列出它们,名称无关紧要,因为这不是代码并且问题的上下文已经定义。我想知道为什么所有这些吹毛求疵...
-
@user2341104 这不是吹毛求疵,这个问题就目前而言没有意义。当您说
short时,您实际上是指int16_t吗?
标签: types alignment portability sizeof