写在前面:
前面提到了应用程序大多基于glibc的malloc/free进行内存的分配。这里不讨论共享内存,因为共享内存都是预先分配好的,所以由共享内存mmap和shm所设计的内存泄漏比较少见。
接下来我们从应用调用的维度来看下,应用程序都有哪些调用入口,以及它们是如何申请和释放内存的。
一,应用程序内存申请与释放
因为应用程序是程序开发语言强相关的,那么就需要了解下应用程序开发者在使用高级语言进行内存的申请时的入口函数。其实除了java语言是其jvm虚拟机来进行内存的管理,其他大多数主流语言都是基于glibc的分配器进行内存的管理。
下面几种是TIOBE Index网站上受欢迎程度排名靠前的几种开发语言,我们来简单了解下。
1.1 C语言内存申请与释放
这些函数可以在 <stdlib.h> 头文件中找到。
• void* malloc(unsigned size); //在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
• void* realloc(void* ptr, unsigned newsize); //该函数重新分配内存,把内存扩展到 newsize。
• void* calloc(size_t numElements, size_t sizeOfElement);//在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是 0。
• void free(void *address); //该函数释放 address 所指向的内存块,释放的是动态分配的内存空间。 文章来源:https://www.toymoban.com/news/detail-437118.html
1.2 c++语言内存申请与释放
c&文章来源地址https://www.toymoban.com/news/detail-437118.html
到了这里,关于Linux内存从0到1学习笔记(6.12 应用程序是如何申请内存的呢?)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!