64-битные адреса - PullRequest
       25

64-битные адреса

0 голосов
/ 11 декабря 2011

Я компилирую приложение для 64-битной операционной системы Windows.Приложение должно сохранять 64-битные адреса, мне нужно определиться с типом переменной, чтобы сохранить их.Я думал, чтобы спасти их долго.Но sizeof(long) == 4. Где и как можно сохранить адреса

Ответы [ 5 ]

10 голосов
/ 11 декабря 2011

Вы должны хранить адреса памяти в указателях:

void *myaddr = 0x0123456789ABCDEF; // memory address
int *myaddr2 = 0x0123456789ABCDEF; // pointer to int in memory, dereferencable

Вы можете получить адрес переменной следующим образом:

int myvar;
int *addrofmyvar = &myvar;
printf("%p", addrofmyvar); // use %p to print pointers

Примечание : есть некоторые различия между C и C ++ в отношении указателей (особенно void pointers).Смотрите стандарты C и C ++.Нет такой вещи как "C / C ++".

7 голосов
/ 11 декабря 2011

Если вы намереваетесь сохранить указатель как число, используйте uintptr_t или intptr_t. Они гарантированно соответствуют размеру и представлению указателя.

В противном случае вы не пишете переносимый код.

4 голосов
/ 11 декабря 2011

Вы должны использовать фактические указатели (для любого типа в адресе) для хранения адресов.

2 голосов
/ 11 декабря 2011

Я не пробовал, но, возможно, с long long будет работать.

Пожалуйста, проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/s3f49ktz%28v=vs.80%29.aspx

unsigned long long, 8 байтов, эквивалентно беззнаковому __int64

диапазон: от 0 до 18,446,744,073,709,551,615

0 голосов
/ 29 марта 2013

Не используйте LONG или LONG LONG при написании кроссплатформенного кода. LONG не имеет одинакового размера на разных платформах / разных компиляторах.

...