作者:牛客192239号
链接:在1G内存的计算机中能否malloc(1.2G)?_技术交流_牛客网
来源:牛客网

问题:在 1G 内存的计算机中能否 malloc(1.2G) ?为什么?

【解答要点】:malloc能够申请的空间大小与物理内存的大小没有直接关系,仅与程序的虚拟地址空间相关。程序运行时,堆空间只是程序向操作系统申请划出来的一大块虚拟地址空间。应用程序通过malloc申请空间,得到的是在虚拟地址空间中的地址,之后程序运行所提供的物理内存是由操作系统完成的。

本题要申请空间的大小为 1.2G=2 30 × 1.2 Byte ,转换为十六进制约为 4CCC CCCC ,这个数值已经超过了 int 类型的表示范围,但还在 unsigned 的表示范围。幸运的是 malloc 函数要求的参数为 unsigned 。见下面的示例代码。

#include <stdio.h>
#include <stdlib.h>int main(){char*p;const unsigned k = 1024 * 1024 * 1024 * 1.2;printf("%x\n", k);p = (char *)malloc(k);if (p != NULL)printf("OK");elseprintf("error");return 0;}

调试结果:

4ccccccc
OK

【知识拓展】malloc能够申请的空间到底能达到多大,还真是一个比较复杂的问题。想知道在一台机器上malloc能够申请的最大空间到底是多少,可以使用下面的程序进行测试。

#include <stdio.h>
#include <stdlib.h>
unsigned maximum = 1024 * 1024 * 1024;
int main(int argc, char *argv[])
{unsigned blocksize[] = { 1024 * 1024, 1024, 1 };int i, count;void* block;for (i = 0; i < sizeof(blocksize) / sizeof(unsigned); i++){for (count = 1; ; count++){block = malloc(maximum + blocksize[i] * count);if (block != NULL) {maximum = maximum + blocksize[i] * count;free(block);}else {break;}}}printf("maximum malloc size = %u bytes\n", maximum);return 0;
}

注:本机环境为VS2017+Win10,运行内存8G。运行时间超过五分钟,仍未得出结果:

原文中提到:在当前正在使用的Windows环境中,可申请的最大空间超过1.9G。

实际上,具体的数值会受到操作系统版本、程序本身的大小、用到的动态/共享库数量、大小、程序栈数量、大小等的影响,甚至每次运行的结果都可能存在差异,因为有些操作系统使用了一种叫做随机地址分布的技术,使得进程的堆空间变小。感兴趣的读者可以去研究操作系统中的相关内容。

有了以上与malloc相关的知识后,对于下面问题的答案自然就容易理解了。

以下关于malloc及相关概念的说法中,错误的是(    )。

A.内存泄露一般是指程序申请了一块内存,使用完后没有技术将这块内存释放,从而导致程序占用大量内存

B.无法通过malloc( size_t ) 函数调用申请超过该机器物理内存大小的内存块

C.无法通过内存释放函数 free( void * ) 直接将某块已经用完的物理内存直接还给操作系统

D.可以通过内存分配函数 malloc( size_t ) 直接申请物理内存

选项A和C的结论是正确的,选项B和D的概念是错误的。应用程序不能直接申请物理内存,malloc申请的是虚拟空间。

在 1G 内存的计算机中能否 malloc(1.2G)相关推荐

  1. 在1G内存的计算机中能否malloc(1.2G)?为什么?

    作者:开点工作室(微信公众号:kaidiancs) 链接:https://www.nowcoder.com/discuss/20610?type=0&order=0&pos=6& ...

  2. 内存在计算机中的作用及其性能参数有哪些,内存的性能指标有哪些 主要参数是什么...

    随着现在电子产品的盛行,人们对于电子产品的选购也越来越多,这就对于电子产品的质量及内存空间提出了很高要求,尤其是内存的性能指标一定要达标,下面就来介绍一下. 内存的性能指标 知不知道内存的主要性能参数 ...

  3. 内存在计算机中的作用及其性能参数有哪些,内存条有哪些作用功能重要参数

    内存是电脑的核心部件之一,内存好坏直接影响电脑正常工作,可能很多用户不知道内存具体有什么作用以及重要参数,下面一起看看!希望能帮到您! 内存条有什么用? 由于CPU处理数据的速度是超级快的,而硬盘的读 ...

  4. 计算机中临时存储数据指令的部件,粤高教版初中信息技术七年级上册1.2一睹它的真容 课件.pptx...

    粤高教版初中信息技术七年级上册1.2一睹它的真容 课件.pptx 信息技术粤教版 七年级上,第2课 一睹它的真容 -计算机硬件与软件,新知导入,计算机作为一种功能强大的信息处理工具,已经离不开我们生活 ...

  5. 8g内存学习计算机专业够吗,电脑8g内存够用吗_win108g内存够吗-系统城

    2018-02-23 15:41:57 浏览量:15524 我们知道操作系统对硬件都有一定的要求,比如内存大小.早期内存普遍2G.4G,现在都是8G以上.那么win10 8g内存够不够用呢?其实内存够 ...

  6. 在计算机中虚拟内存占用的是哪里的空间,Windows虚拟内存详谈

    动设置虚拟内存 内存在计算机中的作用很大,电脑中所有运行的程序都需要经过内存来执行,如果执行的程序很大或很多,就会导致内存消耗殆尽.为了解决这个问题,Windows中运用了虚拟内存技术,即拿出一部分硬 ...

  7. java数组释放内存空间,Java中数组的内存分析

    正文 引言: 墨白在文末给大家准备了程序员的适用壁纸,需要的小伙伴自取,今天的内容是给大家聊聊Java中数组的内存分析和原理,很多朋友可能已经忘记了,毕竟这是非常基础的点了,这次算是给大家复习了吧! ...

  8. C中的malloc:C中的动态内存分配

    什么是C中的malloc()? (What is malloc() in C?) malloc() is a library function that allows C to allocate me ...

  9. 计算机中的物理地址与内存

    这两天有个问题一直萦绕着,计算机中的物理地址和内存地址,虚地址究竟是怎么回事?地址是怎样分配的呢? 翻了下操作系统课本,恩,晚上回去看看存储器管理,虚拟存储器,磁盘存储器管理这几章.隐约还记得微机原理 ...

最新文章

  1. 一文读懂云计算、边缘计算、移动边缘计算和自动驾驶的前世今生!
  2. Button的使用(六):ToggleButton
  3. 基于silverlight4(beta)的摄像头应用(Beta2)发布
  4. AGC005D ~K Perm Counting
  5. 如何从代码层面优化系统性能
  6. 一天学会 Maven+Springboot+RabbitMQ 微服务快速开发教程
  7. Windows 2000本地路由表
  8. C89与C99标准比较
  9. 正则表达式:匹配Double类型,整数和小数
  10. 创意设计师变圆周率为彩色艺术品
  11. 【信息系统项目管理师】第8章-项目质量管理 知识点详细整理
  12. 安装SQLServer2008后Windows防火墙上的端口开放
  13. 微服务真的过时了吗?Twitter员工因为微服务被马斯克解雇了
  14. 3 天天向上的力量 c语言
  15. 宝塔+青龙面板+机器人+诺兰
  16. RVDS 3.1 下载地址及破解方法
  17. 开发一款系统软件大概需要多少钱呢
  18. 迪科斯特拉算法(Dijkstra Algorithm)
  19. 如何让spyder中途暂停(之前运行出来的结果仍然显示)
  20. 5G/NR 随机接入过程之PRACH时域资源

热门文章

  1. 【啊哈!算法】算法4:队列——解密QQ号
  2. mysql 当前时间减指定时间_Mysql时间加减函数
  3. rust 局域网联机_腐蚀怎么搭建服务器联机 游戏联机方法一览
  4. 苹果推出AirPods后,接近传感器与TWS耳机迅速发展
  5. 网络营销中邮件营销的优势
  6. React18手动封装WithRouter
  7. lwip网络通信socket_LWIP之SOCKET编程
  8. Log4j2+ELK使用说明
  9. python--读取config配置文件
  10. etcd数据存储及数据多版本控制实现逻辑