指针内存分配
Pointer Memory Allocation
我正在尝试深入学习指针的概念。在下面的代码中,我创建了一个数组并创建了一个指向每个元素的指针。
int bucky[5];
int *bp0 = &bucky[0];
int *bp1 = &bucky[1];
int *bp2 = &bucky[2];
cout<<"bp0 is at memory address:"<<bp0<<endl;
cout<<"bp1 is at memory address:"<<bp1<<endl;
cout<<"bp2 is at memory address:"<<bp2<<endl;
这些是分配给数组元素的内存。
bp0 is at memory address:0x0018ff3c
bp1 is at memory address:0x0018ff40
bp2 is at memory address:0x0018ff44
以我对 c++ 的有限了解,我知道内存是连续分配给数组的。但仔细观察输出,bp0 看起来不合适。
根据我的说法,bp0 应该在 0x0018ff36
。还是 0x0018ff3c , 0x0018ff40 , 0x0018ff44
的位置在 CPU 中是连续的?
那么有没有可能两个连续的内存分配没有按顺序分配?
每个int使用4个字节。
数组的第一个位置是 0x0018ff3c 所以下一个 int 将在 0x0018ff3c + 4
注意地址是十六进制的,所以:
0x0018ff3c + 0x00000004 = 0x0018ff40
注意:这些都是十六进制数。顺序如下所示:0x3c
、0x3d
、0x3e
、0x3f
、0x40
、0x41
...
+---+---+---+---+---+---+---+---+---+---+---+---+
| bp0 | bp1 | bp2 |
+---+---+---+---+---+---+---+---+---+---+---+---+
0x0018ff3c d e f 40 1 2 3 4 5 6 7 8
假设 int 的大小是 4 个字节并且 bp0 指向 0x0018ff3c。
bp1 = bp0 + 4 = 0x0018ff40
bp2 = bp1 + 4 = 0x0018ff44
我正在尝试深入学习指针的概念。在下面的代码中,我创建了一个数组并创建了一个指向每个元素的指针。
int bucky[5];
int *bp0 = &bucky[0];
int *bp1 = &bucky[1];
int *bp2 = &bucky[2];
cout<<"bp0 is at memory address:"<<bp0<<endl;
cout<<"bp1 is at memory address:"<<bp1<<endl;
cout<<"bp2 is at memory address:"<<bp2<<endl;
这些是分配给数组元素的内存。
bp0 is at memory address:0x0018ff3c
bp1 is at memory address:0x0018ff40
bp2 is at memory address:0x0018ff44
以我对 c++ 的有限了解,我知道内存是连续分配给数组的。但仔细观察输出,bp0 看起来不合适。
根据我的说法,bp0 应该在 0x0018ff36
。还是 0x0018ff3c , 0x0018ff40 , 0x0018ff44
的位置在 CPU 中是连续的?
那么有没有可能两个连续的内存分配没有按顺序分配?
每个int使用4个字节。 数组的第一个位置是 0x0018ff3c 所以下一个 int 将在 0x0018ff3c + 4
注意地址是十六进制的,所以:
0x0018ff3c + 0x00000004 = 0x0018ff40
注意:这些都是十六进制数。顺序如下所示:0x3c
、0x3d
、0x3e
、0x3f
、0x40
、0x41
...
+---+---+---+---+---+---+---+---+---+---+---+---+
| bp0 | bp1 | bp2 |
+---+---+---+---+---+---+---+---+---+---+---+---+
0x0018ff3c d e f 40 1 2 3 4 5 6 7 8
假设 int 的大小是 4 个字节并且 bp0 指向 0x0018ff3c。
bp1 = bp0 + 4 = 0x0018ff40
bp2 = bp1 + 4 = 0x0018ff44