windows进程中的内存结构
在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识。
接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存
中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中
的C语言代码如没有特别声明,默认都使用VC编译的release版。
首先,来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Global)、本地变量
(Local),静态变量(Static)、寄存器变量(Regeister)。每种变量都有不同的分配方式。先来看下
面这段代码:
#i nclude <stdio.h>
int g1=0, g2=0, g3=0;
int main()
{
static int s1=0, s2=0, s3=0;
int v1=0, v2=0, v3=0;
//打印出各个变量的内存地址
printf("0x%08x",&v1); //打印各本地变量的内存地址
printf("0x%08x",&v2);
printf("0x%08x",&v3);
printf("0x%08x",&g1); //打印各全局变量的内存地址
printf("0x%08x",&g2);
printf("0x%08x",&g3);
printf("0x%08x",&s1); //打印各静态变量的内存地址
printf("0x%08x",&s2);
printf("0x%08x",&s3);
return 0;
}
编译后的执行结果是:
0x0012ff78
0x0012ff7c