Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Сколько места в памяти занимает указатель в C++?

#cpp #указатели


Искал информацию по данному вопросу, но не находил однозначного ответа. Кто-то говорит,
что все зависит от разрядности операционной системы: если система x64, то выделяется
8 байт, если же x86, то 4. Другие утверждают, что указатель занимает столько же памяти,
сколько и та переменная, на которую указывает указатель. То есть если у меня есть строковая
переменная типа string, которая занимает 28 байт, то, если я создам указатель на эту
переменную, то и он займет 28 байт? Или же 4(8)? Где представлена верная информация? 
    


Ответы

Ответ 1



Размер указателя зависит от настроек компилятора в момент компиляции программы. Больше ни от чего. Как вы скажете компилятору - так и будет. Никакого отношения к OS или hardware, на которых производится компиляция программы, размер указателя не имеет. Настройки компилятора определяют все параметры целевой платформы, для которой будет выполнена компиляция, в том числе и размер указателя. В современных "массовых" целевых платформах используется так называемая плоская модель памяти с указателями размера 32 или 64 бита (4 или 8 байтов). Во времена DOS/Win16, когда подлежащая аппаратура использовала сегментную адресацию памяти, компиляторы С++ поддерживали целый зоопарк разнообразных моделей памяти (tiny, small, large, compact, standard, huge и т.д.) в каждой из которых мог быть свой размер указателя. Если компиляция производится для какой-то более экзотической целевой платформы (embedded etc.), то и размер указателя может быть совсем другим. В языке С++ также есть свои особые типы "указателей", такие как указатели-на-члены-класса. Эти типы обычно обладают своей особой внутренней структурой и их размер обычно превосходит размер обычного указателя.

Ответ 2



Надежнее всего написать консольную программу с кучей sizeof() - навсегда сами запомните.

Комментариев нет:

Отправить комментарий