1、进程在执行的过程中,malloc申请空间,不使用时,没有free就会出现内存泄漏;

如果进程结束了,那么所有向操作系统申请的内存都会被回放(释放);

2、申请1G或者更大空间,到底能不能成功?

如果当前物理内存剩余空间够用,那么申请空间可以成功

如果当前物理内存空间不够,看有没有虚拟空间,若有,观察虚拟内存+物理内存是否满足申请大小,否则不能成功。

sudo swapoff -a;关闭虚拟内存

sudo swapon -a;开启虚拟内存

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<assert.h>
#include<string.h>int main()
{char *s=(char*)malloc(1024*1024*1024);assert(s!=NULL);memset(s,0,1024*1024*1024);printf("over\n");exit(0);
}

申请空间超过内存空间,把一部分放到交换空间(虚拟内存)

申请空间——>物理内存剩余空间+虚拟内存

3、32位操作系统进程4G虚拟空间分布

4.父进程堆区申请的空间复制后,子进程也有一份

也需要释放

fork会把进程的上下文都复制一遍,如果是malloc申请的话

内核会给子进程分配和父进程一样的空间,父子进程都需要free。

代码验证:

#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<unistd.h>
#include<assert.h>
#include<string.h>int main()
{char *s=(char *)malloc(128);assert(s!=NULL);pid_t pid=fork();assert(pid!=-1);if(pid==0){strcpy(s,"child");}else{strcpy(s,"parent");}printf("s=%s\n",s);free(s);exit(0);
}

Linux申请空间(malloc)相关推荐

  1. Linux 基础知识(2)---Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别

    Linux内核空间内存申请函数kmalloc.kzalloc.vmalloc的区别 kzalloc与kmalloc区别    这个函数就是原来的两个函数的整合 , 即原来我们每次申请内存的时候都会这么 ...

  2. 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间

    动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...

  3. linux内核空间内存动态申请

    参考:<linux设备驱动开发详解>华清远见 ,--人民邮电出版社 用户空间内存动态申请 在用户空间动态申请内存的函数为 malloc(),这个函数在各种操作系统上的使用是一致的,mall ...

  4. 结构指针的坑之(定义结构体指针时并没有分配存储空间,所以要用malloc()申请空间)

    这段代码会报错,核心转储 #include<stdio.h> #include <string.h>struct role // 定义一个结构体 { // char name[ ...

  5. 空间申请(malloc)与释放(free)——C语言

    空间申请(malloc)与释放(free)--C语言 文章目录 空间申请(malloc)与释放(free)--C语言 1. malloc与free函数 1. malloc与free函数 参考链接: h ...

  6. C语言malloc申请空间函数的两种返回方法

    测试ok,代码如下: /********************************************* 功能:malloc申请空间函数的两种返回方法* 作者:lml 时间:2020年4月1 ...

  7. linux 进程装入 物理内存 页表,linux进程空间一步步探究.doc

    linux进程空间一步步探究.doc linux 进程地址空间的一步步探究 讲师:程姚根 我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内 ...

  8. C语言如何动态分配空间:malloc

    一般的变量在定义是就要确定大小,但是有的时候不知道用户的需要,就比如说排序,你不知道用户想要给几个数排序,所以为了保险起见往往是定义一个很大的变量,而实际上用户可能只需要给5个数排序,你却int k[ ...

  9. C/C++动态申请空间方式

    C语言中用malloc/free: C++里用new/delete; 1:C语言动态申请一维数组: #include<stdio.h> #include<stdlib.h> i ...

最新文章

  1. html如何用v-for遍历,v-for循环遍历
  2. SQL Server扩展事件(Extended Events)-- 将现有 SQL 跟踪脚本转换为扩展事件会话
  3. 有用的sql(mysql)
  4. 将一个信号同步到clk中的通式
  5. 一个全栈式的应用集成平台,打破“信息孤岛”
  6. CMapStringToPtr::SetAt\CAsyncSocket
  7. 【蓝桥杯嵌入式】【STM32】1_LED之点灯仪式
  8. Vue 爬坑之路(四)—— 与 Vuex 的第一次接触
  9. Mysql数据库乱码
  10. abp 应用层异常处理(自动控制器中)
  11. 如何绘制用例图 - How to Draw Use Case Diagram
  12. Panel的基本用法
  13. 防止vps上SSH被猜测密码
  14. jQuery自定义插件
  15. 中国3D打印软件市场现状分析及发展前景预测报告
  16. 华大 HC32L130 调试问题总结
  17. java内存分析详解_深入java内存查看与分析详解
  18. ip camera如何将流媒体信息传送到流媒体服务器,IP Camera远程监控系统的设计与实现...
  19. mysql算gps距离_mysql JS 计算两GPS坐标的距离函数:
  20. IT产品是计算机类产品吗,IT产品是什么

热门文章

  1. class wizard entry is missing的解决方法
  2. 10年,知乎为何依旧“赚钱难”?
  3. 可信计算和可信赖计算的渊源
  4. 猿人学第四题-CSS加密【雪碧图、样式干扰】
  5. centos+tomcate + https协议 SSL证书制作、部署支持iphone、ipa下载安装.ipa程序
  6. BeautifulSoup爬取笔趣阁小说并下载到本地
  7. 自动化错误mysql vba,c - 运行时错误-214767259(80004005)自动化错误未指定错误 - Excel VBA - UIAutomation - 堆栈内存溢出...
  8. stop the bibi
  9. Sklearn 模型保存和使用
  10. php利用wsh突破函数禁用执行命令(安全模式同理)