【发布时间】:2012-04-22 06:48:53
【问题描述】:
我需要一对标准整数类型,有符号和无符号,它们对应于(合理解释)机器字长,并且保证彼此大小相同。
在具有干净地址模型的平台上,intptr_t 和 uintptr_t 符合要求,因此使用它们当然是可能的。
但是,有问题的代码可能需要在各种嵌入式系统上运行。我猜其中一些仍然使用具有 286 样式架构的 CPU,其中最大的有效整数类型小于指针 - 如果不是这样,请纠正我 - 但如果是这样,那么有一个案例要做用于使用较小的整数类型。
那个较小的整数类型大概对应于size_t 和ptrdiff_t - 但是这些类型是否保证彼此大小相同?我确实需要能够在有符号和无符号类型之间来回转换而不会丢失。
还有什么我应该考虑的吗?
【问题讨论】:
-
为什么需要机器字大小的东西?或许您应该明确您的应用程序对代码施加的实际约束,我们可以讨论如何满足这些约束,而不用试图用机器语言来构建它。
-
因为它需要适合索引数组,跟踪分配的内存块的大小等等。
-
如果您的约束是它需要足够大以处理任意地址以及它们之间的差异,那么 (u)intptr_t 和 ptrdiff_t 等似乎很清楚。是唯一适合使用的类型。这就是他们的目的。
-
@rwallace - 在 286 上,
int仍然大到足以容纳内存段的大小,即使地址更大。