项目名称 | 【苏嵌实训-嵌入式linuxC第5天】 |
---|---|
今日进度以及任务 | 学习了函数,内存管理,关键字 |
本日任务完成情况 | 基本掌握了关键字的用法,了解了函数书写规范,内存管理的概念及相关知识 |
本日开发中出现的问题汇总 | 无 |
本日未解决的问题 | 无 |
本日开发收获 | 掌握的一些算法 |
其他 | 无 |
逆置算法
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#define MAX_SIZE 100
void reverse_str(char *src,int len)
{
int i=0;
char temp;
for(i =0 ;i<len/2;i++)
{
temp = *(src+i);
*(src+i)=*(src+len-1-i);
*(src+len-1-i) = temp;
}
}
void reverse_word(char *src)
{
int len =0 ;
int x = strlen(src);
while(*src!='\0')
{
if(*src==' ')
{
reverse_str(src-len,len);
len =0;
}
else
{
len++;
}
src++;
}
src = src - x;
}
int main()
{
char src[MAX_SIZE];
printf("Please input src:\n");
gets(src);
reverse_str(src,strlen(src));
printf("src = %s\n",src);
reverse_word(src);
printf("src = %s\n",src);
return 0;
}
1、malloc、free、内存池
(1)malloc实现原理?
首先挨个检查堆中的内存是否可用,如果可用那么大小是否能满足需求,要是都满足的话就直接用。当遍历了堆中的所有内存块时,要是没有能满足需求的块时就只能通过系统调用向操作系统申请新的内存,然后将新的内存添加到堆中。
(2)free如何知道释放多大的内存空间?
操作系统在分配内存的时候 同时会划分一个区域用于存储分空间的首地址和内存分配大小,当用户调用free函数的时候是 改变这个区域里存储的内存大小的值,具体内存空间的释放由操作系统去完成。
(3)内存池实现原理?
内存池的思想是,在真正使用内存之前,预先申请分配一定数量、大小预设的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存,当内存释放后就回归到内存块留作后续的复用,使得内存使用效率得到提升,一般也不会产生不可控制的内存碎片。
2、static在什么样的情况下使用?
- 修饰局部变量:
当需要改变局部变量的生命周期,即只赋值一次,直到程序结束才释放的时候用static修饰 该局部变量。 - 修饰全局变量:
只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。即当该全局变量只需初始化一次,不许其他源文件访问的时候用static修饰全局变量。 - 修饰函数:
当需要函数只能在声明它的文件中可见,其他文件不能引用的时候可用static修饰该函数。
3、为什么要使用typedef给类型重命名?
好处是能区分不同场合使用不同数据类型,让在不同使用环境下让数据类型变得有“具体含义”。