C++中变量在内存中的存储
一、内存大致可以分为三部分:代码区、堆栈区、静态数据段。C和C++中有全局变量,静态变量以及局部变量等几类。全局变量和静态变量是在编译的时候就已经分配好在数据段,也就是说在执行main函数之前就已经分配好了地址,如果定义的时候已经初始化,那么就存放初始化的值,如果没有初始化,则由编译器初始化为0。这就说明在整个程序的执行过程中全局变量和静态变量的地址和类型不会发生变化,可能变化的只是他的值。对于动态变量,则在编译的阶段并不分配内存,而是执行到相应的代码段时再分配内存。局部变量共有以下几种:
编译器对局部变量的处理是放入栈中,出栈和入栈操作的操作数都是跟着指令存在于代码段内的,当函数执行到局部变量处,进行入栈操作,给他分配栈中的内存,供其它操作访问。在使用结束后再出栈。所以,局部变量的生存期是从定义的地方到该函数结束和代码段结束。
二、在C++中,内存管理是一件十分让人畏惧的事,要考虑的方面和情况很多,我认为关键的一点是要知道你的这个内存是属于什么分区中。在C++中程序在运行过程中分为:栈,堆,常量数据区,自由存储区,全局/静态存储区&#x
一、内存大致可以分为三部分:代码区、堆栈区、静态数据段。C和C++中有全局变量,静态变量以及局部变量等几类。全局变量和静态变量是在编译的时候就已经分配好在数据段,也就是说在执行main函数之前就已经分配好了地址,如果定义的时候已经初始化,那么就存放初始化的值,如果没有初始化,则由编译器初始化为0。这就说明在整个程序的执行过程中全局变量和静态变量的地址和类型不会发生变化,可能变化的只是他的值。对于动态变量,则在编译的阶段并不分配内存,而是执行到相应的代码段时再分配内存。局部变量共有以下几种:
1 int main(void)
{
int a;//局部变量定义于main中
...........
{
int a;//局部变量定义于代码段内
}
}
2 void fun()
{
int a;//局部变量定义于普通函数内
...
}
3 void fun(int a,int b)//形式参数
{
...
}
编译器对局部变量的处理是放入栈中,出栈和入栈操作的操作数都是跟着指令存在于代码段内的,当函数执行到局部变量处,进行入栈操作,给他分配栈中的内存,供其它操作访问。在使用结束后再出栈。所以,局部变量的生存期是从定义的地方到该函数结束和代码段结束。
二、在C++中,内存管理是一件十分让人畏惧的事,要考虑的方面和情况很多,我认为关键的一点是要知道你的这个内存是属于什么分区中。在C++中程序在运行过程中分为:栈,堆,常量数据区,自由存储区,全局/静态存储区&#x