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?
}
答案 0 :(得分:13)
不,这不能保证。使用intptr_t
或uintptr_t
将指针安全地存储在整数中。
有一些体系结构是错误的,例如分段的DOS内存模型。在那里,内存以64k段结构化 - 一个对象永远不会比一个段大,所以16位size_t
就足够了。但是,指针具有“段”和“偏移”部分,因此根据定义它必须大于16位才能引用不同的段。