Почему моя память иногда составляет 4,5 байта, а иногда 6 байтов? - PullRequest
0 голосов
/ 12 апреля 2020

Почему память моего iBook в модели MacBook Pro 2015 иногда составляет 4,5 байта, а иногда - 6 байтов?

Я запустил этот код в C.

#include <stdio.h>
#include <string.h>

int main(){

char ch[] = "Hello World!";
char *p1 = "Hello World!";

printf("%p %s\n", &ch , ch);

printf("size of = %lu bytes\n", sizeof(&ch));

printf("%p %s\n", p1, p1);

printf("size of = %lu bytes\n", sizeof(p1));

return 0;
}

Мой вывод терминала равен

0x7ffee8f54a2b Hello World!
size of = 8 bytes
0x106cabf88 Hello World!
size of = 8 bytes

Почему в первом случае я получаю 6-байтовый адрес памяти , а 4,5 адреса памяти во втором случае?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

В этом выражении

printf("%p %s\n", &ch , ch);

выводится адрес переменной ch с автоматическими c продолжительностью хранения, объявленной как

char ch[] = "Hello World!";

В этом выражении

printf("%p %s\n", p1, p1);

выводится значение, хранящееся в указателе p1, которое является адресом первого символа строкового литерала "Hello World!" который хранится в памяти stati c (память с продолжительностью хранения stati c).

Таким образом, вы выводите адреса различных типов памяти.

Во втором случае Значение адреса меньше, чем в первом случае. Начальные нули не выводятся, хотя оба указателя имеют одинаковый размер 8 байтов.

0 голосов
/ 12 апреля 2020

Почему я получаю 6-байтовый адрес памяти в первом случае и 4,5 адреса памяти во втором случае?

Формат "%p" зависит от реализации. Система OP проста, пропуская первые ноль шестнадцатеричных цифр.

Адрес памяти (указатели) имеют одинаковый размер: 8 байт (или, возможно, больше, но то же самое). другая область памяти @Barmar.

...