学习小结
2017-04-17 19:17
127 查看
经过前面一段时间的学习,学习到了 一系列的str : strlen,strcat,strcmp,strcpy,strstr.学习到这里的时候 感觉 程序语言其实也是挺有趣的。
前天学习到内存分配的时候
{
栈:局部变量,形式参数。
堆:动态内存。
静态区:静态变量和全局变量。
}
学习到了一个新的知识:动态内存。
而为什么要提到动态内存,因为在我们进行 编译的时候,一个数组的长度只有在运行的时候才能够知道,但是不同的情况下 需求的空间大小也不一样,一般都是申请一个能够容纳最多元素的数组,这样存在一定的空间浪费,并且灵活性不够。
为了使数组 永远不会溢出,动态内存很好的解决了这个问题。给定一个初始大小,然后再需要的空间增加的 实现增容。就像我们使用的通讯录一样,给定一个不大的内存空间存放有限小的人数,当需要存储的人数变多,也实现动态的增加,不会造成空间的浪费,也不会因为达到上限而烦恼。
malloc:执行动态内存分配。
free:内存的释放。
在我看来,free 这个函数是动态内存部分最关键的 一环,在申请空间并使用之后返还内存,如果不进行free这项操作的话,会导致程序运行时一直占用系统内存,最终导致系统崩溃,所以说free 这个函数是在进行malloc之后必须进行的一项操作。
而malloc则就是分配合适的内存块,提供其指针,但是不会对内存块进行初始化,一切的初始化需要自己手动进行。
因为malloc不进行初始化,所以有了calloc这个函数。
calloc在返回指向内存块的指针之后 就对其进行了初始化,相当于 malloc和memoset的集合。方便了使用者的操作,但是当你只是相对数值进行存储的话,calloc就比malloc更加浪费时间了。
还有一个realloc函数,其主要作用就是在需要增容时直接在后面添加一个空间,而当后面的空间不够是开辟一块足够大小的空间,将之前空间的内容拷贝过来,并将之前的空间进行释放。
动态空间的使用必须是严谨的,需要注意一下几点:
1.对空指针进行解引用。
2.对动态内存的越界。
3.释放非动态内存。
4.释放动态内存的一部分。
5.再次访问已经释放的内存空间。
6.对同一块动态内存的多次释放。
加油。
前天学习到内存分配的时候
{
栈:局部变量,形式参数。
堆:动态内存。
静态区:静态变量和全局变量。
}
学习到了一个新的知识:动态内存。
而为什么要提到动态内存,因为在我们进行 编译的时候,一个数组的长度只有在运行的时候才能够知道,但是不同的情况下 需求的空间大小也不一样,一般都是申请一个能够容纳最多元素的数组,这样存在一定的空间浪费,并且灵活性不够。
为了使数组 永远不会溢出,动态内存很好的解决了这个问题。给定一个初始大小,然后再需要的空间增加的 实现增容。就像我们使用的通讯录一样,给定一个不大的内存空间存放有限小的人数,当需要存储的人数变多,也实现动态的增加,不会造成空间的浪费,也不会因为达到上限而烦恼。
malloc:执行动态内存分配。
free:内存的释放。
在我看来,free 这个函数是动态内存部分最关键的 一环,在申请空间并使用之后返还内存,如果不进行free这项操作的话,会导致程序运行时一直占用系统内存,最终导致系统崩溃,所以说free 这个函数是在进行malloc之后必须进行的一项操作。
而malloc则就是分配合适的内存块,提供其指针,但是不会对内存块进行初始化,一切的初始化需要自己手动进行。
因为malloc不进行初始化,所以有了calloc这个函数。
calloc在返回指向内存块的指针之后 就对其进行了初始化,相当于 malloc和memoset的集合。方便了使用者的操作,但是当你只是相对数值进行存储的话,calloc就比malloc更加浪费时间了。
还有一个realloc函数,其主要作用就是在需要增容时直接在后面添加一个空间,而当后面的空间不够是开辟一块足够大小的空间,将之前空间的内容拷贝过来,并将之前的空间进行释放。
动态空间的使用必须是严谨的,需要注意一下几点:
1.对空指针进行解引用。
2.对动态内存的越界。
3.释放非动态内存。
4.释放动态内存的一部分。
5.再次访问已经释放的内存空间。
6.对同一块动态内存的多次释放。
加油。
相关文章推荐
- Page 的生命周期学习小结(翻译兼笔记)
- 协议学习小结之二 —— 利用多种协议实现路由跟踪 TraceRoute
- Dev-C++下基本数据类型学习小结
- Page 的生命周期学习小结
- 学习阶段小结
- Page 的生命周期学习小结
- [持续更新] 学习历程 迭代计划和小结
- 民航学概论学习小结
- vi编辑器的学习使用(小结)
- 学习jsp中的一些小结
- 学习C++小结
- 近期学习小结(2005-2-13)
- 学习小结(2005-2-22)
- STL学习小结(原创:桑英硕 )
- VBA学习小结
- 近期学习工作小结
- ARP协议学习小结——协议简介和图形化工具SendARP
- MFC学习小结
- Dev-C++下基本数据类型学习小结
- linux 2.6 内核学习小结(1)---硬件相关概念