Подтвердить что ты не робот

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

Я делаю (возможно, ошибочное) предположение, что он является реализацией и/или зависит от системы. Есть что-то вроде INT_MAX или CHAR_BIT, которые скажут мне размер указателя в памяти?

4b9b3361

Ответ 1

Указатель указывает на место в памяти, поэтому он будет 32 бит в 32-битной системе и 64 бит в 64-разрядной системе.

Размер указателя также не имеет отношения к типу, на который он указывает, и может быть измерен с помощью sizeof(anyType*)

UPD

Как я ответил, это было предложено способом, которым задавался вопрос (который предложил простой ответ). Да, я согласен с тем, что в таких случаях, как указатели на таблицу виртуальных методов, размер указателя будет отличаться, и согласно этой статье, он будет различаются на разных платформах и даже на разных компиляторах на одной платформе. В моем случае, например (x64 ubuntu, GCC 4.6.3), он равен 16 байтам.

Ответ 2

Будет ли sizeof(int*) работать? Или что вы хотите проверить?

Ответ 3

Это определенно зависит от системы. Обычно простой указатель данных может храниться в переменной size_t. В С++ 11 есть макрос SIZE_MAX, который является максимальным значением для size_t. В С++ 11 вы также можете использовать std:: intptr_t.

Если вы принимаете указатели на функции-члены, все становится еще более сложным. Это зависит от других вещей, если класс наследуется от одного или нескольких родителей, если он предоставляет виртуальные функции и, конечно же, реализацию.

Здесь вы можете найти подробную статью о указателях функций-членов, а также несколько примеров для нескольких компиляторов.

Ответ 4

Ответ на простой случай типа int* прост и дается на другие ответы.

Но имейте в виду, что указатели на объекты, которые используют множественное наследование, могут содержать несколько (WORDs/DWORDs/QWORDs), в худшем случае - до 5 (пять).

Хорошая статья об этом: http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

Ответ 5

Размер указателя зависит от вашей операционной системы (на самом деле количество бит операционной системы), попробуйте функцию sizeof (type *).

Ответ 6

#include<stdio.h>
#include<conio.h>
void main()
{
    printf(" %d",sizeof(int *));
    printf(" %d",sizeof(char *));
    printf(" %d",sizeof(float *));
    printf(" %d",sizeof(double *));
    getch();
}