内存,在聊内存之前,我们先聊聊计算机,我们通常讲的500G,其实不是指内存,而是指硬盘,内存一般是4G / 8G / 16G。再往上一层是高速缓存、寄存器。
硬盘、内存、高速缓存、寄存器的速度依次加快、造价也一次增加、所以自然而然带的空间就少。(突然感觉扯远了哈哈,回归正题)
举个例子,在一个地区,要造很多房子。有一天,一家人的亲戚来投奔这一家人,可是这么多房子,没有门牌号,怎么找的到呢?
可是如果这个房子有了门牌号,并且亲戚在纸条上记下了房间的门牌号,不是很容易找到了吗。
这里的门牌号就是地址,而房间对应的就是空间。
对应关系: 地址 —> 空间
是如何产生地址的呢?
计算机有32位和64位的
32位表示32根地址线(数据线),通电之后,就会产生正电和负电(1 和 0)
.
所以可以表示成
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000001
00000000 00000000 00000000 00000010
.
.
.
.
.
.
11111111 11111111 11111111 11111111
一共有2^32个地址
内存地址 | 内存空间 |
---|---|
0 | |
1 | |
2 | |
3 | |
4 | |
… |
那一个内存空间用多少存储空间呢?
8 bit = 1 byte
如果使用1个内存空间等于1个比特, 2^32 bit 大约是 0.5 GB,这和 4G差的不止一点。
.
如果使用1个内存空间等于1个字节,字节是比特的8倍,那就是4G了,一个内存空间 , 一个字节byte
申请开辟一块内存空间
int a;
相当于你网上直接订票,提前说了这个位置我要了~(当然,有钱包场都可以)
a = 10;
在这个空间(房间)里,放上10这个数字。
好了,这就相当于新户入住。可是还要解决门牌号(地址)的事情。
.
&a;
& 是取地址符,可是有了地址我们得要有一个变量去接受他。
.
.
.
这时候我们给出一个指针变量去存放地址。
int *p = &a;
*不是操作符,表示他只是一个指针变量。
一种变量来存放地址的就是指针变量。
*p = 20;
是解引用操作符
可以通过p去修改a的值~~~
int *p;
在使用时同样的在内存地址上申请了一块空间,对应的内存空间存放了 a 的内存地址。
<未完待续>