20

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

1 回答 1

13

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

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

于 2013-09-15T09:22:00.560 回答