项目名称 | 苏嵌实训-嵌入式LinuxC第 7天 |
今日进度以及任务 | malloc()和free()的原理; static在什么样的情况下使用; 理解typedef以及为什么要使用typedef给类型重命名。 |
本日任务完成情况 | 1.malloc()和free()的原理; 在C语言中只能通过malloc()和其派生的函数进行动态的申请内存,而实现的根本是通过系统调用实现的(在linux下是通过sbrk()系统调用实现)。 malloc()到底从哪里得到了内存空间?答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。 malloc()在运行期动态分配分配内存,free()释放由其分配的内存。malloc()在分配用户传入的大小的时候,还分配的一个相关的用于管理的额外内存,不过,用户是看不到的。所以, 实际的大小 = 管理空间 + 用户空间 此外,堆中的内存块总是成块分配的,并不是申请多少字节,就拿出多少个字节的内存来提供使用。堆中内存块的大小通常与内存对齐有关(8Byte(for 32bit system)或16Byte(for 64bit system)。 因此,在64位系统下,当(申请内存大小+sizeof(struct mem_control_block) )% 16 == 0的时候,刚好可以完成一次满额的分配,但是当其!=0的时候,就会多分配内存块。
2.static在什么样的情况下使用; 全局静态变量: 在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。 局部静态变量: 在局部变量前面加上关键字static,该局部变量变成了静态局部变量,其特点如下: a.该变量在全局数据区分配内存。 静态函数: 在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
3.为什么要使用typedef给类型重命名。 typedef 声明,简称 typedef,为现有bai类型创建一个新的名字du。 |
本日开发中出现的问题汇总 | 上课时老师的代码有的不太能看懂,有点跟不上。 |
本日未解决问题 | 无 |
本日开发收获 | 了解了C语言的各种函数实现方法。 |
其他 | 无 |
物联网工程实践实训日报表2020.7.9
最新推荐文章于 2022-01-18 06:31:56 发布