1.bss全局变量相关:
bss段用来存放那些没有初始化的或者初始化为0的全局变量;
bss类型的全局变量只占运行时的内存空间,而不占用文件空间。
在整个程序运行周期中,bss数据是一直存在的。开始时需要初始化为0;
2常量数据段相关(rodata)
用来存放常量数据,但是常量不一定放在rodata中,是可以共享的。
在嵌入式系统中常量数据段放在rom里不用进入ram直接读取。
不能修改常量。
3.text代码段
存放函数和部分整型常量,与常量段相似。
4.栈
栈用于存放临时变量和函数参数,栈作为基本数据结构,是实现函数调用主要手段,用来管理函数调用的局部变量和参数。
5堆
堆是一种内存,生命周期完全由使用者控制。
malloc用来分配一块指定大小的内存
realloc用来重新分配一块存在的内存
free用来释放内存
6内存分配方式
静态分配:内存在程序编译时就已经分配好,这段内存在程序整个运行期间都有效,如全局变量,static等
在栈上创建。在执行函数时,函数的局部变量都可以在栈上创建,函数的执行结束,这些内存会自动释放。
从堆上分配,也就是动态分配,程序员利用malloc申请内存,自己负责用free解放内存。
七:无参宏与有参宏的区别
无参:格式#define 宏名 常数 /表达式/ 格式符
有参:格式#define(形参表)常数/表达式/格式符
八:条件编译:
在程序移植和调试时,可以使用条件编译。
第一种形式:
#ifdef
程序段
#else
程序段2
#endif
第二种形式
#if常量表达式
程序段
#else if
程序段2
#endif
第三种形式
#ifndef
程序段 1
#else
程序段2
#endif
九:结构体
结构体:将相关联的数据打包成一个整体,方便使用。
结构体与数组比较,结构体各个元素类型可以是不同的,而数组是必须相同的。
如:struct student
{ char name [10];
char sex;
int age;
};
十:联合体与结构体的不同
对于联合体不同成员的赋值,将会对其他成员重写,原来成员值不存在。