# 编写`test2.c`
```c
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i = 2;
int j = 3;
int sum = i + j;
printf("%d\n", sum);
return 0;
}
```
# 编译运行
```javascript
zhoumengkang@bogon:~/Downloads$ gcc test2.c -o test2
zhoumengkang@bogon:~/Downloads$ ./test2
5
```
# 内存初探
我们习惯用16进制来表示内存地址,我当前电脑为64位的,所以内存的地址空间范围为`64个0`~`64个1`的跨度,但是我们只用48位,用十六进制表示就是
```javascript
0x000000000000
0xffffffffffff
```
## 为什么64位机指针只用48个位?
> https://www.zhihu.com/question/28638698
> https://stackoverflow.com/questions/6716946/why-do-64-bit-systems-have-only-a-48-bit-address-space
# 代码完善`test2.c`
```c
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i = 2;
int j = 3;
int sum = i + j;
printf("%d\n", sum);
// 增加内存输出测试
printf("i addr is: %p\n",&i);
printf("j addr is: %p\n",&j);
printf("sum addr is: %p\n",&sum);
return 0;
}
```
# 编译运行
```javascript
zhoumengkang@bogon:~/Downloads$ gcc test2.c -o test2
zhoumengkang@bogon:~/Downloads$ ./test2
5
i addr is: 0x7fff5ab02adc
j addr is: 0x7fff5ab02ad8
sum addr is: 0x7fff5ab02ad4
```
我们可以通过`sizeof`来查看每个变量占用的内存大小
```c
printf("i size\t%lu",sizeof(i)); // 4
```
由此可见`i`,`j`,`sum`的地址是连续的,而且是先分配的地址的值更大。
栈的内存分布就是自上而下的。
先到这里。