1.Linux虚拟地址空间
4G内存:1G内核空间和3G用户空间;
用户空间:数据段: 全局数据 static静态区
代码段 : 代码,常量
栈: 局部变量,形参
堆: malloc分配地址,realloc调整内存地址,free释放内存地址;每个区间的四个属性:r 只读,w修改,x 可执行,p/s 是否共享内存。free和malloc配套使用
2.通常用if(p!=NULL)进行放错处理或者初始化指针来避免野指针。
3.出现段错误时可以用gdb逐步查找段错误
4.终止宏定义的作用域可以使用#undef命令
5.文件包含:使用尖括号表示在包含文件目录中去查找,不在源文件目录去查找;使用双引号表示首先在当前的源文件目录中查找,未找到时才到包含目录中去查找
6.条件编译:
一种形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
7.##是连接符,将两个Token连接为一个Token
8.结构体命别名
typedef struct [student]
{
char name[10];
char sex;
int age;
float score;
}STU
4G内存:1G内核空间和3G用户空间;
用户空间:数据段: 全局数据 static静态区
代码段 : 代码,常量
栈: 局部变量,形参
堆: malloc分配地址,realloc调整内存地址,free释放内存地址;每个区间的四个属性:r 只读,w修改,x 可执行,p/s 是否共享内存。free和malloc配套使用
2.通常用if(p!=NULL)进行放错处理或者初始化指针来避免野指针。
3.出现段错误时可以用gdb逐步查找段错误
4.终止宏定义的作用域可以使用#undef命令
5.文件包含:使用尖括号表示在包含文件目录中去查找,不在源文件目录去查找;使用双引号表示首先在当前的源文件目录中查找,未找到时才到包含目录中去查找
6.条件编译:
一种形式:
#ifdef 标识符
程序段1
#else
程序段2
#endif
7.##是连接符,将两个Token连接为一个Token
8.结构体命别名
typedef struct [student]
{
char name[10];
char sex;
int age;
float score;
}STU