KEIL环境,small模式编译
#include <reg52.h>
//int tmp = 1;
int main(void)
{
int i = 0;
return 0;
}
编译后 Program Size: data=11.0 xdata=0 code=23
#include <reg52.h>
int tmp = 1;
int main(void)
{
int i = 0;
return 0;
}
编译后 Program Size: data=13.0 xdata=0 code=156
#include <reg52.h>
int tmp ;
int main(void)
{
int i = 0;
return 0;
}
编译后 Program Size: data=13.0 xdata=0 code=23
网上说的变量如何保存在内存中的
#include
一个进程运行时,所占用的内存,可以分为如下几个部分:
1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS释放。
3、全局变量、静态变量:初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和和未初始化的静态变量在相邻的的另一块区域。程序结束后由系统自动释放。
4、文字常量:常量字符串就是存放在这里的,程序结束后由系统释放。
5、程序代码:存放函数体的二进制代码。
这里有几个问题想请教下
1.为什么定义一个全局变量,code区会变得那么大,好像这个变量放在了code区
2..声明一个全局变量没有赋值,Program Size和没有声明这个变量一样?C语言不是默认没有赋值的全局变量为0吗? |