LINUX下,C语言MALLOC可能达到的最大空间测试
一直不怎么用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可能达到的最大空间测试相关推荐
- 利用多线程实现linux下C语言的聊天室程序:
转载:http://www.360doc.com/content/16/0421/11/478627_552531090.shtml 利用多线程实现linux下C语言的聊天室程序: 客户端代码: th ...
- 您知道Linux下C语言编程的一些注意事项吗_教育中国
您知道Linux下C语言编程的一些注意事项吗_教育中国 云风的 BLOG: 一个 C 接口设计的问题 一个 C 接口设计的问题 C 语言在本质上,参数传递都是值传递.不像 Pascal 和 C++ 可 ...
- 关于Linux下C语言开发基础的实验内容。
Linux下C语言开发基础实验内容 目录 1.Linux下C语言开发流程 2.vi,vim编辑器的使用 3.Gcc编译器的使用 总体选项: 警告选项: 4.GDB 基本命令的使用 5.Make 工程管 ...
- Linux下C语言编程
第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...
- 初识Linux下C语言编程
本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...
- Linux 应用程序 嵌汇编,Linux下C语言嵌汇编
Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...
- linux c语言工具,Linux下C语言编程环境的工具.doc
Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 Linux下C语言编程环境的工具 要想在Linux下进行C语言编程,首先得搭建好一个编程环境.这里分别说明一下几个非常有用的软件包. ...
- Linux下C语言编程-进程的创建
Linux下C语言编程-进程的创建 作者:hoyt 1.进程的概念 Linux操作系统是面向多用户的.在同一时间可以有许多用户向操作系统发出各种命令.那么操作系统是怎么实现多用户的环境呢?在现代的操作 ...
- linux父进程中显示子进程pid,请教linux下c语言函数fork父进程打印子进程的PID
请教linux下c语言函数fork父进程打印子进程的PID 关注:296 答案:2 信息版本:手机版 解决时间 2019-01-14 04:55 雨不眠的下 2019-01-13 12:23 用于 ...
最新文章
- MolCLR | 对比学习在分子图表示任务中大有作为
- python脚本设置linux环境变量_Linux环境变量export方法与修改文件方法的区别
- excel学习笔记之一
- Cisco路由器故障诊断技术
- php的辅助工具下载,PHPTools 工具包(让你的EditPlus可以调试PHP)
- iscsi介绍及iscsi target配置
- Web Broadcast Channel
- JS面向对象的实现和原理
- mp3文件合并java_Android - 合并mp3文件
- python猜词游戏演讲ppt_Python 猜词游戏–多步骤猜词+评分系统
- 程序员去哪接私活?分享10个兼职平台,人已赚麻
- setup、erf、reactive
- swagger初体验
- vue2和vue3的区别
- 给Android车载蓝牙音乐添加盘控控制功能
- python从ftp下载文件时问题解决
- diskpart修改盘符
- docker下vi和vim安装
- 170325德勤笔试编程题汇总
- FZU - 2261 浪里个浪(多源最短路SPFA)
热门文章
- 对一些内存名词术语的解释(bank ECC等)——转载
- 【Mind+Python】基于Pyecharts+Flask+Pinpong智能家居数字大屏系统
- java方法重写[详解]
- CSS3前端开发中需要用到的变换矩阵
- python生成一维数组,二维数组
- html编写邮件发送_如何编写HTML电子邮件通讯
- c语言打印数组中的汉字
- Java基于SpringBoot+Vue+nodejs的在线小说阅读平台 element
- html5 游戏制作教程,【整理】一步一步学做HTML5游戏教程
- 【信息系统项目管理师】第七章 项目成本管理(考点汇总篇)