Ответ 1
Нет, это не гарантировано. Используйте intptr_t
или uintptr_t
для безопасного хранения указателя в целых числах.
Существуют/были архитектуры, где имеет смысл, чтобы это было ложным, например, сегментированная модель памяти DOS. Там память была структурирована в сегментах 64 тыс. - объект никогда не может быть больше сегмента, поэтому будет достаточно 16-бит size_t
. Однако указатель имел части "сегмент" и "смещение", поэтому по определению они должны быть больше 16 бит, чтобы иметь возможность ссылаться на разные сегменты.