苏嵌实训DAY5

Q1:free()函数是如何知道释放多大的空间?
A1:
假设你用malloc需要申请100字节,实际是申请了104个字节。把前4字节存成该块内存的实际大小,并把前4字节后的地址返回给你。 free释放的时候会根据传入的地址向前偏移4个字节 从这4字节获取具体的内存块大小并释放。(实际上的实现很可能使用8字节做为头部:其中每四个字节分别标记大小和是否正在使用)
实际的内存管理比这个要复杂的多,但一般手段都是如上通过记录头或者叫做cookie来存储大小以及是否正在使用来确定以后到底要回收多少和是否可以复用。
内存管理比较复杂的主要原因是内存管理程序会缓存和合并已经申请的内存块并且去复用,或者申请超大的一个块,自己省着点用 ,这样不必每次都想操纵系统要。

Q2: C语言什么情况下使用static?
A2:
一个进程的全局变量被声明为static之后,它的中文名叫静态全局变量。静态全局变量和其他的全局变量的存储地点并没有区别,都是在.data段(已初始化)或者.bss段(未初始化)内,但是它只在定义它的源文件内有效,其他源文件无法访问它。所以,普通全局变量穿上static外衣后,只能被定义它的源文件中的变量或函数访问。

Q3:为什么要使用typedef给类型重命名?
A3:
1、为了使类型的含义更加明确;
比如typdef unsigneg char BYTE 你就知道接下来用BYTE定义的是将要对字节进行操作,而不是字符或字符串。
2、为了保持库代码的兼容和一致性;
比如你写了一个库,某个数据类型需要用int,后来你觉得不够大,更新版本的时候就要改所有的int为long,如果typedef int INT_TYPE的话,你就只需改typedef就可以了
3、为了简化繁琐的类型声明;
C++里,string其实是basic_string<char, char_traits, allocator>的typedef.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值