← Назад к вопросам

Какой размер указателя в 64-битном режиме?

1.0 Junior🔥 211 комментариев
#Linux и операционные системы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Размер указателя в 64-битном режиме

Прямой ответ

В 64-битном режиме (x86-64, ARM64) размер указателя составляет 8 байт (64 бита).

Проверка в C++:

#include <iostream>
using namespace std;

int main() {
    cout << "sizeof(void*) = " << sizeof(void*) << " байт" << endl;
    cout << "sizeof(int*) = " << sizeof(int*) << " байт" << endl;
    cout << "sizeof(char*) = " << sizeof(char*) << " байт" << endl;
    return 0;
}

Вывод на 64-битной системе:

sizeof(void*) = 8 байт
sizeof(int*) = 8 байт
sizeof(char*) = 8 байт

Почему 8 байт?

Адресное пространство: В 64-битной архитектуре процессор адресует 2^64 ячеек памяти. Для хранения такого адреса нужны 64 бита = 8 байт. Это позволяет процессу использовать адресное пространство до 16 экзабайт.

Сравнение с 32-битом

В 32-битном режиме (x86, ARM 32-bit):

// На 32-битной системе
sizeof(void*) = 4 байт  // 2^32 адреса = 4 ГБ максимум

32-битный указатель занимает 4 байта и адресует максимум 4 ГБ.

Важные уточнения

1. Размер ВСЕГДА одинаков для всех указателей

Независимо от типа, на который указывает — размер 8 байт:

void* ptr1;           // 8 байт
int* ptr2;            // 8 байт
double* ptr3;         // 8 байт
class MyClass* ptr4;  // 8 байт

2. Размер зависит от архитектуры, не от типа данных

int* занимает столько же, сколько char*, хотя int = 4 байта, char = 1 байт. Указатель всегда занимает 8 байт на 64-битной системе.

3. Практический пример

int x = 42;
int* ptr = &x;

// На 64-битной системе:
// sizeof(x) = 4 байта (int)
// sizeof(ptr) = 8 байт (указатель на int)

Выравнивание в структурах

Важно учитывать при выравнивании памяти:

struct MyStruct {
    char c;      // 1 байт
    int* ptr;    // 8 байт (выравнивание!)
    int i;       // 4 байта
};

// sizeof(MyStruct) может быть 16 или 24 байта
// в зависимости от выравнивания

Максимальный адрес

Теоретически адреса от 0x0000000000000000 до 0xFFFFFFFFFFFFFFFF (16 EB), но ОС ограничивает адресное пространство процесса (обычно 48 бит активно на x86-64).