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

时间:2013-09-15 09:20:24

标签: c++ c types standards compatibility

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?
}

1 个答案:

答案 0 :(得分:13)

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

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