物联网工程实践实训日报表2020.7.9

项目开发日报表
项目名称 苏嵌实训-嵌入式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,该全局变量变成了全局静态变量。全局静态变量有以下特点。
    a.在全局区分配内存。
    b.如果没有初始化,其默认值为0.
    c.该变量在本文件内从定义开始到文件结束可见

局部静态变量:

在局部变量前面加上关键字static,该局部变量变成了静态局部变量,其特点如下:

    a.该变量在全局数据区分配内存。
    b.它始终驻留在全局数据区,直到程序运行结束。
    c. 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

静态函数:

在函数返回类型前加上static关键字,函数即被定义为静态函数,其特点如下:
    a.静态函数只能在本源文件中使用。
    b.在文件作用域中声明的inline函数默认为static类型。

 

3.为什么要使用typedef给类型重命名。

typedef 声明,简称 typedef,为现有bai类型创建一个新的名字du。
typedef 使用最多的地方是创建易于记忆的类zhi型名,用它来归档程dao序员的意图。类型出现在所声明的变量名字中,位于 ''typedef'' 关键字右边。例如:
typedef int size;
此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size,这时size就等同于int。

本日开发中出现的问题汇总上课时老师的代码有的不太能看懂,有点跟不上。
本日未解决问题
本日开发收获了解了C语言的各种函数实现方法。
其他
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值