首页
社区
课程
招聘
[原创]深入理解C语言六-知识点记录
2021-7-25 18:36 4869

[原创]深入理解C语言六-知识点记录

2021-7-25 18:36
4869

指针

1
void* pv = NULL;

1、没有解释方式的指针,只是一个地址
2、没有解释方式,不支持*运算,不支持下标运算,不支持加减运算
3、pv赋值需要一个地址类型,任意类型的指针都可以
4、pv不能赋值给有类型的指针

堆内存

1
2
char* p = (char*)malloc(8);
strcpy(p,"hello");

malloc申请的堆内存实际上是一个结构体,成员依次包括:
1、上一个堆地址
2、下一个堆地址
3、所在文件地址
4、所在行
5、堆类型
6、堆长度
7、堆编号
8、上溢标志
9、堆内容
10、下溢标志
指针p实际指向的地址是堆内容的地址。

堆内存使用约定

1、引用或操作资源的变量必须初始化为无效值
2、申请资源后必须检查
3、如果结果错误按需求处理错误
4、使用资源
5、释放资源前必须检查引用资源的变量是否有效
6、释放完成后,必须将引用资源的变量重置为无效值,防止野指针

C程序运行时内存结构

内存属性可分为Read可读、write可写、execute可执行、share共享,程序的全局变量、常量是按同内存属性分配内存空间的。C程序运行时分配的内存空间从低地址到高地址依次为:
1、Code,代码段,re,可读可执行。
2、Data,数据段,包含全局变量,常量、静态常量。
(1)uninit,未初始化部分,wr,可读可写。
(2)inited,初始化部分,wr和r,可读可写。
3、Heap,堆,wr,可读可写。
4、Stack,栈,wr,可读可写。
C程序运行时最开始做的事情是初始化浮点协处理器、初始化全局变量。

作用域

作用域实际上是编译器按照C标准所规定的语法做出的访问限制。
1、块作用域:函数内部的中括号中
2、函数作用域:函数的开始到函数的结束
3、文件作用域:变量所处的文件内
4、进程作用域:所处模块的装载到所处模块的卸载

变量的作用域和生命周期

全局变量和局部变量的区别:
1、作用域不一样
2、生命周期不一样
3、存放区域不一样(内存)

全局变量

1、进程作用域
2、生命周期从所处模块装载到所处模块卸载
3、存放在内存的数据段

局部变量

1、函数作用域
2、生命周期从从函数的开始到函数的结束
3、存放在内存的栈中

静态全局变量

1、文件作用域
2、生命周期从所处模块装载到所处模块卸载
3、存放在内存的数据段

静态局部变量

1、函数作用域
2、生命周期从所处模块装载到所处模块卸载
3、本质上是受编译器按语法约束的全局变量,导出受限,不会提供符号给其他模块使用
4、初始化为常量编译期间,不产生代码
5、存放在内存的数据段

github:https://github.com/0I00II000I00I0I0

bilibili:https://space.bilibili.com/284022506


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-7-26 19:36 被流照君编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 1954
活跃值: (3653)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
method 2021-7-25 21:40
2
0
好水
游客
登录 | 注册 方可回帖
返回