C语言笔记2-----变量
看到变量的时候,有点熟悉的感觉,我想起我在学函数的时候,变量就是一个未知数。而在C语言中变量是指,其值在其作用域内可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储空间。变量在使用前必须要定义,每个变量都应该有自己的地址,上述是对于什么是变量的解释。
变量的三大特点:
变量的数据类型:主要说明变量占用内存空间的大小;
变量的作用域:变量有效的使范围;
变量存储的类别:变量在内存中的存储的方式,不同的存储方式,影响变量在内存中的生存方式;
举例:int num = 5;什么意思?
初步的理解:定义了一个int的类型的变量,变量的名字的是num,并赋值5;
每个程序打开后,内存中有一个进程。而对于进程来说,操作系统给每个进程都分配了4G的内存的虚拟的空间。有人会说那么的进程那么需要多少内存的空间呢,其实真是的内存分配了2M(举个例子),而真正的工作的时候,由MMU内存管理来完成管理,这主要是由于内存资源的稀缺,那么平时我们都用过指针,打印出来的地址其实虚拟地址的空间。
那么每个进程有4G的空间,这空间是怎么分配的呢!
分为:内核段,栈空间段,堆空间段,数据段,代码段
内核段:应该是内核所运行的空间,并拥有所有的硬件的权限;
栈空间段:主要放局部的变量,函数的形参,自动变量。先进后出的原则(先定义的后释放空间,有点像C++的构造与析构的顺序),管理的权限:系统。变量的空间是自动释放的。
堆空间段:主要由 malloc ralloc calloc 来分配空间的,管理的权限:用户。变量的空间的释放需要用户手动的释放,(free)
数据段:数据段由bss,rodata,data,
Bss:主要保存没初始化全局变量;
Rodata:常量
Data:全局变量,static修饰的变量;(程序结束后释放)
我们再看int num = 5;
我们应该分为num是全局变量还是局部变量;
全局变量:在内存空间里面的数据段里面的data申请4个字节的空间的并给这片空间取名为num 并为这片空间赋值为5;
局部变量:在内存空间的栈空间里面申请4个字节的空间,并取名为num,为这片空间赋值5;
注:局部变量,如果没有初始化,变量是随机数,全局变量自己本身初始化为0;
但是养成良好的习惯,尽量变量进行初始化。