c malloc-关于C malloc()的请教....

问题描述

关于C malloc()的请教....

在WINDOWS 64bits 下
执行:
#include
#include

int main(void)
{
    void *vp;
    int count=0;
    while(  ( vp=malloc(100*1024*1024) )  )
    {
        count++;
    }
    printf("已经分配%d00 MB 内存空间 n",count);

    getchar();
    return 0;
}
运行结果:  已经分配5100 MB(每次运行的结果都不一样。) 内存空间。、
为什么在4G内存下可以分配5100MB内存空间?难道是缓存?
怎样精准的计算导致内存信息泄漏?5100是怎样来的?这两个问题之间有什么联系吗?

解决方案

Windows 平台下,确实有可能是虚拟内存;像 WinCE 下,就没有这种现象。

精准的计算导致内存信息泄漏,可以通过对已使用和未使用的内存数值进行检控来实现。
自己写代码:如何:调查进程的内存使用情况.aspx "如何:调查进程的内存使用情况")
或通过如下的方法:内存的使用与windows 内存监控

解决方案二:

我记得这个函数每次只能分配最大64K内存

解决方案三:

Windows 平台下,确实有可能是虚拟内存;像 WinCE 下,就没有这种现象

解决方案四:

首先我确实没有这么试过。
你可以尝试下把每次分配的内存地址打印出来看看。

时间: 2024-09-02 12:16:36

c malloc-关于C malloc()的请教....的相关文章

解析操作系统的内存分配(malloc)对齐策略

问题: 我们在写程序的时候经常发现程序使用的内存往往比我们申请的多,为了优化程序的内存占用,搅尽脑汁想要优化内存占用,可是发现自己的代码也无从优化了,怎么办?现在我们把我们的焦点放到malloc上,毕竟我们向系统申请的内存都是通过它完成了,不了解他,也就不能彻底的优化内存占用. 来个小例子 //g++ -o malloc_addr_vec mallc_addr_vec.cpp 编译 #include<iostream> using namespace std; int main(int arg

C/C++误区三:强制转换 malloc() 的返回值

首先要说的是,使用 malloc 函数,请包含 stdlib.h(C++ 中是 cstdlib) ,而不是 malloc.h .因为 malloc.h 从来没有在 C 或者 C++ 标准中出现过! 因此并非所有编译器都有 malloc.h 这个头文件.但是所有的 C 编译器都应该 有 stdlib.h 这个头文件. 在 C++ 中,强制转换 malloc() 的返回值 是必须的,否则不能通过编译.但是在 C 中,这种强制转换却是多余的,并且 不利于代码维护. 起初,C 没有 void 指针,那时

关于c语言的malloc的一个问题???

问题描述 关于c语言的malloc的一个问题??? 下面是一个malloc程序----malloc(-1)与malloc(0xffffffff),感觉结果应该一样,但是不是这样,不知道为什么?求高手指教 int main() { char *pc; printf("%u %xn",-1,-1); printf("%u %xn",0xffffffff,0xffffffff); if((pc = malloc(-1))==NULL) printf("not m

C++中new与delete、malloc与free应用分析_C 语言

一般来说,在C/C++的面试时,对于new/delete和malloc/free这两对的使用和区别经常被考查到,如果这种基础的问题都答不上来,估计很难过面试了.本文即是对new/delete和malloc/free这两对的使用和区别较为简单的分析一下,供大家参考. 一.new和delete new和delete是C++的运算符,用于动态分配内存和释放内存. 1.new表达式 标准库定义了operator new函数的几个重载版本,没有使用noexcept说明的版本在内存分配失败时可能会抛出bad

浅析动态内存分配Malloc二元操作性能教程

在浅析之前先看下 malloc的原型: void* malloc(size_t size); 这里唯一需要注意到是: typedef unsigned int size_t; 来段测试程序 #include < stdio.h > int main(int argc, char * argv[]) {  int i = 0;  for (; i < 100; i++) {   malloc(32);   /**< 每次malloc 32 字节 */  }  return 0; }

C语言中的malloc使用详解_C 语言

一.原型:extern void *malloc(unsigned int num_bytes); 头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的.) 功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL. 当内存不再使用时,应使用free()函数将内存块释放. 举例: #include<stdio.h&g

Linux Malloc分析-从用户空间到内核空间【转】

转自:http://blog.csdn.net/ordeder/article/details/41654509 版权声明:本文为博主(http://blog.csdn.net/ordeder)原创文章,未经博主允许不得转载.   目录(?)[-] 1背景知识 1 进程的用户空间  12 地址映射 malloc 和free 1 用户层 2 内核层 3 虚拟地址与物理地址 总结 参考 附录   本文介绍malloc的实现及其malloc在进行堆扩展操作,并分析了虚拟地址到物理地址是如何实现映射关系

malloc的内存分配原理

0 堆内存的在计算机内存中的形式 根据<The C Programming language>推测得到堆内存,图中的Heap区域即为堆内存块(Heap区域的数目不代表计算机堆内存的真实数目).   [1] 堆内存不连续.只有标识为Heap的才是堆内存. [2]  在malloc()/free()看来,每个Heap所代表的的堆由两部分组成:Header +可给用户使用的堆内存.在Header中包含了"指向下一邻近高地址堆内存块的指针"."本堆块的大小".每

求大神帮忙,用C语言写个生日蛋糕出来

问题描述 求大神帮忙,用C语言写个生日蛋糕出来 各位大神帮帮忙,有个朋友过生日 不知道如何用C语言编个生日蛋糕,能力有限,特来请教大神们 解决方案 不是你能力有限,是C语言功能有限.C语言哪里能变出蛋糕来. 解决方案二: #include <stdlib.h> #include <math.h> #include <graphics.h> int size, color = 1; void *save1, *save2; void save(); void dsnow(