Ответ
Размер указателя в C++ определяется разрядностью целевой платформы (архитектуры), так как указатель должен быть способен адресовать всё виртуальное адресное пространство процесса.
- На 32-битных (x86) системах размер указателя обычно составляет 4 байта (32 бита), что позволяет адресовать до 4 ГБ памяти.
- На 64-битных (x86-64, ARM64) системах размер указателя обычно составляет 8 байт (64 бита).
Ключевые моменты:
- Размер указателя не зависит от типа данных, на который он указывает (
int*,char*,MyClass*). - Размер указателя на функцию или указателя на член класса может отличаться от размера указателя на данные, но это зависит от ABI (Application Binary Interface) компилятора и платформы.
Пример:
#include <iostream>
int main() {
std::cout << "Platform pointer sizes:n";
std::cout << "sizeof(int*): " << sizeof(int*) << " bytesn";
std::cout << "sizeof(double*): " << sizeof(double*) << " bytesn";
std::cout << "sizeof(void*): " << sizeof(void*) << " bytesn";
// Указатели на функции могут быть другого размера
std::cout << "sizeof(void(*)()): " << sizeof(void(*)()) << " bytesn";
return 0;
}
Типичный вывод на 64-битной Linux/macOS:
sizeof(int*): 8 bytes
sizeof(double*): 8 bytes
sizeof(void*): 8 bytes
sizeof(void(*)()): 8 bytes