sizeof(size_t)== sizeof(void *)总是如此吗?

C99 / C ++ 11标准是否保证sizeof(size_t) == sizeof(void*)始终为真?

 size_t f(void* p) { return (size_t)(p); // Is it safe? } void* f(size_t n) { return (void*)(n); // Is it safe? } 

不,这不能保证。 使用intptr_tuintptr_t将指针安全地存储在整数中。

有一些架构,它是错误的,例如分段的DOS内存模型。 内存的结构是64k段 – 一个对象永远不会比一个段大,所以16位size_t就足够了。 但是,指针具有“段”和“偏移”部分,因此根据定义它必须大于16位才能引用不同的段。