Запутался.
Win7x64, консоль, MinGW.
1. Почему адресация по 4 байта?
Ведь это выглядит как 32-ух разрядная система, хотя установлена х64.
2. Почему int занимает 4 ячейки (то есть 16 байт), а не 1 ячейку (то есть 4 байта) ?
Если так и есть, и минимальная ячейка памяти равна 4 байтам, то понятно, почему char-у приходится занимать 4 байта, а не 1 байт.
#include <stdio.h>
int main(){
int A[2] = {0};
double B[2] = {0};
char C[2] = {'A', 'B'};
for (int i = 0; i < RANGE; ++i) {
printf("%d %p\n", i, &A[i] );
}
for (int i = 0; i < RANGE; ++i) {
printf("%d %p\n", i, &B[i] );
}
for (int i = 0; i < 4; ++i) {
printf("%d %p\n", i, &C[i] );
}
printf("long%d ", sizeof(long) );
printf("int%d ", sizeof(int) );
printf("char%d \n", sizeof(char) );
return 0;
}
Массив с int
0 0028FF2C
1 0028FF30
Массив с double
0 0028FF18
1 0028FF20
Массив с char
0 0028FF16
1 0028FF17
long4 int4 char1
Распутался:
Не нужно путать логическую адресацию и размер ячейки памяти. Ячейка памяти здесь - 8 бит или 1 байт.
Адресация здесь осуществляется с помощью 32-ух бит, то есть от 00 00 00 00 до FF FF FF FF.