一直不怎么用malloc,但是知道malloc申请的是虚拟地址空间。刚好自己的机器是64位的,所以写了个程序做个测试。

代码原理很简单,建立链表,将申请到的空间都存起来。申请到最大之后,再逐一进行释放。

#include <stdio.h>
#include <stdlib.h>#define M_500M (500 * 1024 * 1024)typedef struct list {struct list *prev;void *mem;
} list;list *head;
list *cur;
int count = 0;
int max = 0;void malloc_mem()
{list *p = NULL;do {p = (list *)malloc(sizeof(list));if (p == NULL) {max = count;return;}p->prev = cur;p->mem = malloc(M_500M);if (p->mem == NULL) { // Malloc failedfree(p);max = count;return;}count++;
//        printf("malloc count %d, malloc addr %p\n", count, p->mem);cur = p;} while (1);
}void free_mem()
{list *p = NULL;do {if (cur == head)return;p = cur;cur = cur->prev;//        printf("free count %d, malloc addr %p\n", count, p->mem);count--;free(p->mem);free(p);} while (1);
}int main()
{head = malloc(sizeof(list));cur = head;malloc_mem();free_mem();printf("we malloced %dG\n", (max / 2));
}

在我这里的运行结果是:

elta@elta:test-code$ gcc malloc.c
elta@elta:test-code$ ./a.out
we malloced 134216G

======================割割割割割==========================

这个程序之所以没有使用递归调用的方法,是因为我一开始用递归,发现堆栈爆掉了。后来知道了,想用递归,可以在shell里设置。

设置完成之后,要重新编译一下。

elta@elta:test-code$ ulimit -s unlimited
elta@elta:test-code$ gcc malloc.c
elta@elta:test-code$ ./a.out
we malloced 134202G

LINUX下,C语言MALLOC可能达到的最大空间测试相关推荐

  1. 利用多线程实现linux下C语言的聊天室程序:

    转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...

  2. 您知道Linux下C语言编程的一些注意事项吗_教育中国

    您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...

  3. 关于Linux下C语言开发基础的实验内容。

    Linux下C语言开发基础实验内容 目录 1.Linux下C语言开发流程 2.vi,vim编辑器的使用 3.Gcc编译器的使用 总体选项: 警告选项: 4.GDB 基本命令的使用 5.Make 工程管 ...

  4. Linux下C语言编程

    第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...

  5. 初识Linux下C语言编程

    本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...

  6. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编

    Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...

  7. linux c语言工具,Linux下C语言编程环境的工具.doc

    Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...

  8. Linux下C语言编程-进程的创建

    Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...

  9. linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID

    请教linux下c语言函数fork父进程打印子进程的PID 关注:296  答案:2  信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...

最新文章

  1. MolCLR | 对比学习在分子图表示任务中大有作为
  2. python脚本设置linux环境变量_Linux环境变量export方法与修改文件方法的区别
  3. excel学习笔记之一
  4. Cisco路由器故障诊断技术
  5. php的辅助工具下载,PHPTools 工具包(让你的EditPlus可以调试PHP)
  6. iscsi介绍及iscsi target配置
  7. Web Broadcast Channel
  8. JS面向对象的实现和原理
  9. mp3文件合并java_Android - 合并mp3文件
  10. python猜词游戏演讲ppt_Python 猜词游戏–多步骤猜词+评分系统
  11. 程序员去哪接私活?分享10个兼职平台,人已赚麻
  12. setup、erf、reactive
  13. swagger初体验
  14. vue2和vue3的区别
  15. 给Android车载蓝牙音乐添加盘控控制功能
  16. python从ftp下载文件时问题解决
  17. diskpart修改盘符
  18. docker下vi和vim安装
  19. 170325德勤笔试编程题汇总
  20. FZU - 2261 浪里个浪(多源最短路SPFA)

热门文章

  1. 对一些内存名词术语的解释(bank ECC等)——转载
  2. 【Mind+Python】基于Pyecharts+Flask+Pinpong智能家居数字大屏系统
  3. java方法重写[详解]
  4. CSS3前端开发中需要用到的变换矩阵
  5. python生成一维数组,二维数组
  6. html编写邮件发送_如何编写HTML电子邮件通讯
  7. c语言打印数组中的汉字
  8. Java基于SpringBoot+Vue+nodejs的在线小说阅读平台 element
  9. html5 游戏制作教程,【整理】一步一步学做HTML5游戏教程
  10. 【信息系统项目管理师】第七章 项目成本管理(考点汇总篇)