# 編寫`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`的地址是連續的,而且是先分配的地址的值更大。
棧的內存分布就是自上而下的。
先到這里。