编程语言
首页 > 编程语言> > 近似于免费商店(堆)大小的C程序

近似于免费商店(堆)大小的C程序

作者:互联网

我应该编写一个不崩溃的程序,并且可以接近免费存储(堆内存)的大小.而提示是

Hint:  Use a loop to allocate, say, 1000000 bytes at a time and 
add 1 to an unsigned long long counter; then when the allocation fails, print
the counter times 1000000.0.

这是我第一次接触编程和c,所以我完全迷失了.免费商店的大小是否取决于计算机的内存?我怎么可能以字节为单位计算那个大内存的大小?

什么是unsigned long long?

解决方法:

通过连续分配块直到分配失败来测量RAM当然是一种方法,但并不是专业程序员如何解决问题.这相当于通过读取整个文件并逐个计算字节来确定文件的大小(一个应该使用stat(),fstat()或fseek()和ftell()代替).

一种更好的方法是向操作系统询问可用的RAM量.毕竟,它肯定知道答案.

在Linux上,您将使用sysinfo()API.阅读this以获取示例.

在Windows上,您将使用GetPhysicallyInstalledSystemMemory().阅读它here.

在MacOS上,您将使用sysctl()API以及CTL_HW和HW_MEMSIZE选择器.

This SO page有三个主要平台的综合示例.

还有一件事:在具有虚拟内存的系统上,您尝试测量的免费存储可能更接近磁盘上系统交换文件的大小,而不是安装的物理RAM的大小,系统上其他进程的状态将是也影响连续分配测量的值.

标签:c,memory,heap-memory,heap
来源: https://codeday.me/bug/20190902/1792804.html