#include <stdio.h>
#include<iostream>
using namespace std;
int g1 = 0, g2 = 0, g3 = 0;
void f(int x1,int x2,int x3) {
int x;
cout << "函数中的变量" << endl;
printf("x地址:0x%08x\n", &x);
printf("x1地址:0x%08x\n", &x1);
printf("x2地址:0x%08x\n", &x2);
printf("x3地址:0x%08x\n", &x3);
}
int main()
{
static int s1 = 0, s2 = 0, s3 = 0;
int v1 = 0, v2 = 0, v3 = 0;
//打印出各个变量的内存地址
cout << "本地变量" << endl;
printf("v1地址:0x%08x\n", &v1); //打印各本地变量的内存地址
printf("v2地址:0x%08x\n", &v2);
printf("v3地址:0x%08x\n\n", &v3);
cout << "全局变量" << endl;
printf("g1地址:0x%08x\n", &g1); //打印各全局变量的内存地址
printf("g2地址:0x%08x\n", &g2);
printf("g3地址:0x%08x\n\n", &g3);
cout << "静态变量" << endl;
printf("s1地址:0x%08x\n", &s1); //打印各静态变量的内存地址
printf("s2地址:0x%08x\n", &s2);
printf("s3地址:0x%08x\n\n", &s3);
f(1,2,3);
return 0;
}
我们可以看到,全局变量和静态变量分配的内存是连续的,本地变量地址是存储在另一块地方的。
对于一个进程的内存空间而言,可以在逻辑上分成3个部份:1、代码区,2、静态数据区3、动态数据区。动态数据区又可以分为栈和堆两种
全局变量和静态变量分配在静态数据区,本地变量分配在栈中,malloc的空间分配在堆中,代码保存在代码区中。