Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >如何获得C++中可用的虚拟内存量?

如何获得C++中可用的虚拟内存量?
EN

Stack Overflow用户
提问于 2010-11-18 13:15:36
回答 5查看 1.8K关注 0票数 3

我想使用mmap函数将文件映射到内存中,并想知道当前平台上的虚拟内存量是否足以映射一个巨大的文件。对于32位系统,我不能映射大于4 Gb的文件。

std::numeric_limits<size_t>::max()是否会给我提供可寻址内存的大小,或者我是否应该测试其他类型(off_t或其他类型)?

正如Lie Ryan在他的评论中指出的那样,这里的“虚拟内存”被滥用了。然而,问题仍然存在:有一个与指针关联的类型,它具有最大值,该值定义了您可以在系统上访问的上限。这是什么类型?是size_t还是ptrdiff_t?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-18 13:53:28

size_t只需要足够大来存储最大可能的单个连续对象。这可能与地址空间的大小不同(例如,在具有分段内存模型的系统上)

但是,在具有扁平内存空间的常见平台上,这两者是相等的,因此,如果您知道目标CPU,则可以在实践中使用size_t

无论如何,这并不能告诉你任何有用的东西。当然,32位的CPU有4 4GB的内存空间,所以size_t是一个32位的无符号整数。但这并没有说明你能分配多少。内存空间的一部分由操作系统使用。而且有些部分已经被您自己的应用程序使用:用于将可执行文件映射到内存(以及它可能使用的任何动态库)、每个线程的堆栈、堆上分配的内存等等。

所以不会,像计算size_t大小这样的技巧会告诉你一些关于你正在运行的地址空间的信息,但是没有什么非常有用的。您可以向操作系统询问您的进程和其他指标使用了多少内存,但同样,这对您没有多大帮助。有可能一个进程只使用几兆字节,但它分散在太多的小分配上,以至于不可能找到大于100MB的连续内存块。因此,在32位机器上,进程几乎不使用内存,您不太可能进行这样的分配。(即使操作系统有一个神奇的WhatIsTheLargestPossibleMemoryAllocationICanMake()应用程序接口,也不会对你有任何帮助。它会告诉你刚才你需要什么。您不能保证在您尝试映射文件时答案仍然有效。

因此,实际上,您所能做的最好的事情就是尝试映射文件,看看是否失败。

票数 1
EN

Stack Overflow用户

发布于 2010-11-18 13:19:30

您好,如果您使用win32编码,则可以使用GlobalMemoryStatusEx和VirtualQueryEx

票数 1
EN

Stack Overflow用户

发布于 2010-11-18 16:22:11

问题是,指针的大小并不能告诉你实际有多少“地址空间”可用,也就是说,可以被映射为一个连续的块。

它受到以下因素的限制:

  • 操作系统。它可能会选择只向您提供理论上可能的地址范围的一个子集,因为可映射内存是用于操作系统自身的目的(例如,使显卡帧缓冲区可见,当然也供操作系统itself).
  • configurable限制使用)。在Linux / UNIX上,"ulimit“命令分别为:setrlimit()系统调用允许以各种方式限制应用程序的地址空间的最大大小,并且Windows通过应用程序的注册表parameters.
  • the历史记录具有类似的选项。如果应用程序广泛使用内存映射,地址空间可能会碎片限制“可用”连续虚拟地址的最大大小。
  • 硬件平台。一些CPU有带“洞”的地址空间;64位x86就是一个例子,其中指针只有在0x0..0x7fffffffffffffff或0xffff000000000000和0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff例如,您有2x128TB,而不是完整的16EB。可以把它看作是48位的“带符号”指针……

最后,不要混淆“可用内存”和“可用地址空间”。执行malloc(someBigSize)和mmap(...,someBigSize,...)是有区别的因为前者可能需要物理内存的可用性来容纳请求,而后者通常只需要足够大的空闲地址范围。

对于UNIX平台,部分答案是使用getrlimit(RLIMIT_AS),因为这给出了应用程序当前调用的上限-如上所述,用户和/或管理员可以对此进行配置。您可以保证,任何尝试mmap大于该值的区域都将失败。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4215127

复制
相关文章
在OSX上安装和使用ROS
参考链接:https://github.com/mikepurvis/ros-install-osx
zhangrelay
2022/04/29
9710
在OSX上安装和使用ROS
Excel催化剂开源第30波-在Excel上尽情地使用LINQ
对于笔者这样的数据分析工作者来说,对数据库有较深的掌握,当然少不了对SQL查询的深度使用,如果在编程的世界中,可以复用这样的能力,真的是一件多么令人高兴的事情。
Excel催化剂
2021/08/19
1.8K0
pycharm使用pip安装模块时提示: No module named pip
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174545.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
1.2K0
Mac OSX 上安装yarn
如果从来没改过这个.bash_profile文件(可能会提示你“已锁定”),你可能需要先把这个文件的内容复制到另一个txt(其它类型)文件中,之后:
全栈程序员站长
2022/09/01
1.6K0
Mac OSX 上安装yarn
PROTAC 降解剂化合物库 | MedChemExpress
A1874 是一种以 nutlin 为基础的、BRD4-降解的 PROTAC,DC50 值为 32 nM (诱导细胞内的 BRD4 降解)。有效抑制多种癌细胞增殖。
MedChemExpress
2023/02/27
2230
PROTAC 降解剂化合物库 | MedChemExpress
使用pip安装模块时,提示MemoryError
在使用pip安装依赖模块时,报错如下: 图片 解决方法: 添加 --no-cache-dir参数 pip3 --no-cache-dir install -r *** 安装时遇到的其他问题: 设置python源命令:pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 提示没有config参数; 解决办法:升级pippip3 install -U pip pip install --upgrade pip 提示:E
JQ实验室
2022/11/18
1.6K0
钙通道阻滞剂/拮抗剂的应用 | MedChemExpress
我们都知道钙、钾、钠离子对于维持个体内环境的重要性,离子通道一直是个有趣而复杂的话题。它们就像为某种物质专属定制的“门”或 VIP 通道,不仅分类繁多,还有着严密的“门控”机制。
MedChemExpress
2023/03/06
6040
钙通道阻滞剂/拮抗剂的应用 | MedChemExpress
Install Scrapy on OSX|mac OSX 上安装Scrapy[SYN:gejoin.com]
顺利的话,一句命令搞定: sudo pip install Scrapy OSX还是需要额外一些包或升级的,包括:
gigiwangs
2019/03/01
7930
在Mac OSX下安装和使用GO语言
Go语言是Google新推出的结合了动态语言和静态语言优势的一个新兴的语言。下面介绍一下如何在Mac系统下安装和使用这个语言。
EltonZheng
2021/01/26
1.5K0
DID | 安慰剂检验
简单介绍一下实证论文中双重差分法(DID)的安慰剂检验(Placebo Test)在Stata中如何操作。
kemosabe
2021/08/27
5.5K0
DID  |  安慰剂检验
【业界】世界反兴奋剂机构使用人工智能来识别兴奋剂作弊
AiTechYun 编辑:xiaoshan.xiang Olivier Niggli透露,世界反兴奋剂机构(WADA)正在考虑通过人工智能来帮助该组织在运动员数据中发现违规行为 WADA计划在其反兴奋
AiTechYun
2018/03/27
5490
【业界】世界反兴奋剂机构使用人工智能来识别兴奋剂作弊
Excel催化剂开源第29波-在Winform上使用富文本编辑器控件
富文本编辑器,一般都是BS架构专利一般,好像百度有一个开源的比较出名,但无奈这些都只能用在JS上,在BS网页端开发上使用。像Winform开发的VSTO,只能羡慕的份。和一般Winform上用的RichText控件,别人BS的富文本编辑器就强大得多。
Excel催化剂
2021/08/19
9660
在Pycharm安装库时,报错提示:python中的pip版本过低。「建议收藏」
但是在执行更新pip指令:python -m pip install --upgrade pip后。 直接在cmd中输入指令后,显示:在anaconda中的pip版本已经是最高了。
全栈程序员站长
2022/09/28
2.3K0
在Pycharm安装库时,报错提示:python中的pip版本过低。「建议收藏」
李伟坚(Excel催化剂):带你全面认识《Excel催化剂》系列功能
本次要介绍的是一款名叫《Excel催化剂》的 Excel 插件,也是目前国内技术含最高的 Excel 插件,共计80大类300个细分功能、180个自定义函数,涉及人工智能、数据库、powerbi 等诸多高大上的内容,让Excel的能力边界得到前所未有的扩展。
寒树Office与RPA
2019/11/29
3.4K0
openwrt 上python pip 安装
一,首先安装python2.7 opkg update opkg install python 二,然后从官网上下载pip安装脚本,注意加上–no-check-certificate wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 三,直接运行 get-pip.py python get-pip.py image.png
qinyang
2018/06/05
7.7K0
在提取 Docker 映像时解决“未找到清单”错误
如果您尝试拉取 Docker 映像并且它显示未找到清单错误,那么您需要了解如何解决它。
网络技术联盟站
2022/03/21
1.5K0
在提取 Docker 映像时解决“未找到清单”错误
个人永久性免费-Excel催化剂功能第18波-在Excel上也能玩上词云图
原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有修改和更新将在简书上操作, 其他平台不作同步修改更新,因此建议阅读其他出处的文章时,尽可能跳转回简书平台上查看。
Excel催化剂
2021/08/19
3650
用科创板给国产中间件打上一剂兴奋剂!
一波三折后,中创软件商用中间件股份有限公司(下称“中创软件”)正稳步推进上市进程,目前已经通过上市委会议。
数据猿
2023/03/03
3580
用科创板给国产中间件打上一剂兴奋剂!
业务安全-DevSecOps 的催化剂
前言 DevSecOps的困境 产品鄙视研发,研发又鄙视运维,运维呢又鄙视安全。 业务和产品说:不是我设计这么好的业务产品,你研发再牛也没用,测试、运维、安全都是我养的。 研发说:要不是我研发这么牛的
DevOps时代
2018/02/02
9010
业务安全-DevSecOps 的催化剂
python使用pip卸载和安装库「建议收藏」
问题出在哪呢?细心的同学会问了。其实呢,pip虽然是python的自带工具,而且安装了python之后会自动安装上pip,但pip工具并不能在python中打开哦! 下面我们演示如何在命令行中退出python,之后打开pip:
全栈程序员站长
2022/11/02
1.5K0

相似问题

如何在CentOS中安装紧缩剂?

15

其他语言的紧缩剂

14

在OSX上安装Typesafe活化剂

69

在Windows上安装php增强剂时遇到的困难

23

DataNucleus增强剂flakey?

512
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文