c语言实现内存管理器_C语言开发软件

c语言实现内存管理器_C语言开发软件C语言-内存管理1.内存管理1.1更灵活的内存管理方式加载对应的库函数就可以申请动态的内存对应的头文件1.2 mallocmalloc函数原型:void *malloc(size_t size) ;malloc函数向系统申请分配size个字

C语言-内存管理   1.内存管理   1.1更灵活的内存管理方式   加载对应的库函数就可以申请动态的内存   对应的头文件   1.2 malloc   malloc   函数原型:void *malloc(size_t size) ;   malloc函数向系统申请分配size个字节的内存空间,并返回一个指向这块空间的指针。   返回的是void类型的函数指针,所以需要强制转换成需要的类型的指针。
c语言实现内存管理器_C语言开发软件   1.3 free   
c语言实现内存管理器_C语言开发软件   注意:free释放完指针,指针还是在原来的位置,并不是野指针或者空指针,只是非法访问了。   2.内存泄露   申请的动态内存没有及时释放,申请了内存空间,没有释放,就会占用电脑的内存   c语言不具备垃圾回收机制   下面的这个程序会卡死,不要轻易尝试,可以在虚拟机尝试。   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   3.malloc还可以申请一块任意尺寸的内存空间   
c语言实现内存管理器_C语言开发软件   4.初始化内存空间   下面的方法可以用java的数组Arrays的内置方法做比较来理解,不过c要考虑指针,麻烦了不少。   下面的这些函数与c语言中str开头的也有所不同,str开头的是针对字符串的,这个mem开头的是用来处理内存空间的。
c语言实现内存管理器_C语言开发软件   4.1memset   函数声明:   4.2 memcpy   函数声明:   该函数将 src 的 count 个字节复制到 dest。该函数返回 dest 的起始位置。   4.3 memmove   函数声明:   该函数的作用和memcpy类似。但是为什么会有memmove呢?   我们看下面这段代码   我们可能认为答案是 1 2 3 1 2 3 4 5 6 7,但是结果并不是   
c语言实现内存管理器_C语言开发软件   与memcpy函数相比,memmove函数更加灵活,因为它能够处理源内存块和目标内存块之间可能会发生重叠的情况。在处理重叠的情况时,memmove函数会先将要复制的数据拷贝到一个临时缓冲区中,然后再将数据复制到目标内存块中,从而避免数据损坏或丢失。   5.calloc   申请内存空间,并默认初始化为0,相当于malloc和memset函数的结合应用   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   6.realloc   是C标准库中的一个动态内存分配函数,用于重新分配已经分配的内存块的大小   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   注意   该篇文章的内存管理,很多地方都可以理解为java数组的内存管理,以及初始化数组啊之类的。   7.c语言的内存布局   7.1内存布局规律   打印各种变量的地址和函数的地址,看有什么规律   
c语言实现内存管理器_C语言开发软件   根据上图的运行结果可以发现。下面的规律。
c语言实现内存管理器_C语言开发软件 7.1.1代码段   
c语言实现内存管理器_C语言开发软件 7.1.2数据段   
c语言实现内存管理器_C语言开发软件 7.1.3 BSS段   
c语言实现内存管理器_C语言开发软件   8.堆   
c语言实现内存管理器_C语言开发软件   9.栈   
c语言实现内存管理器_C语言开发软件   10.栈和堆的区别   10.1生存周期   
c语言实现内存管理器_C语言开发软件   10.2发展方向   [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eHgrhMu3-70)(assets/image-.png)]   
c语言实现内存管理器_C语言开发软件   结果可以看出   栈是从高地址向地址发展的   堆是从低地址向高地址发展的。   11.内存池   如果一直使用malloc和free函数,申请释放内存空间的话,可能会产生内存碎片   就是申请了一片空间,再释放之后,重复多次,每个空间都没有连在一起,就成为了碎片,这样描述是便于理解,不是完全正确   为了解决这个问题,有了内存池   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   12.位域   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   
c语言实现内存管理器_C语言开发软件   ==位域的字节必须是小于数据类型的位的,例如,int是32位,所以不能超过32。   12.2无名位域   一般用来填充或者调整成员之间的位置   
c语言实现内存管理器_C语言开发软件   unsigned int a:1 ;   unsigned int b:1 ;   unsigned int c:2 ;   }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/32753.html

(0)
上一篇 2024年 9月 11日
下一篇 2024年 9月 11日

相关推荐

关注微信