Windows下使用大地址空间

32位C++程序突破2GB内存限制:大地址感知(LAA)实战指南 在Windows内存管理中,32位进程默认只能访问2GB用户态虚拟地址空间,这常成为内存密集型应用的性能瓶颈。其原理源于32位系统4GB地址空间的固有划分:高2GB保留给内核,低2GB分配给用户程序。为解决此限制,Windows提供了大地址感知(Large Address Aware)技术,通过设置编译链接标志,允许程序在特定条件下使用3GB(32位系统配合/3GB启动参数)或接近4GB(64位系统WOW64环境)的用户态地址空间。这项技术的核心价值在于以极低的改造成本,显著提升遗留系统处理大数据集时的稳定 阅读详情
现在讨论一个虚拟地址空间不足的问题。
问题的提出:
    用C/C++写一个程序,要求处理一个非常大的矢量,100M以上个元素。数据处理过程中,还需要用到同样大小的中间结果。
    假设矢量是大小为100M,类型为单精度浮点型(float 4字节),总共需要400MB空间。一个输入矢量,一个输出矢量,以及若干个中间矢量。
    在计算前,通常用new float[1024*1024]来位数组申请空间。对于一个应用程序来说,有4GB的地址空间可用,但实际上连续这样400MB的数组,大约申请3个,就会出现内存不够的错误(严格说不是内存不够,而是虚拟地址空间不够)。程序代码所占空间很小,几百KB,用GlobalMemoryStatusEx()查看,还用1G多用。为什么回内存不够?
    由于内存碎片,连续空间不够。因为在Win32中,4GB的上端2GB归系统所用,一个应用程序实际上可用的只有2GB。而且连接器自动生成的应用程序通常并不占用连续的一个地址空间,而是断断续续的几片,在使用DLL时情况更严重。MFC做的程序,刚启动,虚拟空间中最大的连续空间大约800MB。用new(包括其它空间分配函数,如malloc等)分配的空间,在虚拟地址上必须是连续的。如何解决这个问题。
    有3个思路:
   1、微软的AWE技术。微软对使用大内存的应用程序提供一个方案,在物理内存中申请一些页面,然后在虚拟地址空间中映射一个窗口(窗口可以很小),来对物理内存进行操作。由于这个方案限制了必须使用物理内存。在32位系统中,物理内存最大不能超过4G(通常是2G~3G),用户空间也有2G,如果出现空间不够而是使用AWE,有效的使用最多只有2G(理论上可以用所有的空闲物理页面,但是物理页面占用太多,应用程序的那2G必然要到交换文件中去,效率大大下降),这还不考虑系统和其它应用程序占用的物理页。所以不会带来质的改善。
    2、模拟页交换。这是我所采用的解决方案,以后将详细叙述。这个方案可以解决单个连续空间不大,但是数量很多而不够用的问题,例如要申请20个200MB的空间。
    3、粒度更细的页面交换,需要硬件参与。可以实现每个数据块4GB的地址空间。
Windows 10/11 进程虚拟地址空间实战:3 种工具解析内存布局与分页 本文深入解析Windows 10/11进程虚拟地址空间的管理机制,通过VMMap、Process Explorer和WinDbg三种工具实战演示内存布局与分页分析。文章详细介绍了虚拟地址空间的基础特性、工具使用技巧及高级内存问题诊断方法,帮助开发者优化应用程序内存使用并深入理解Windows内存管理机制。 阅读详情

相关推荐

Qwen3-Max src\hotspot\os\windows\gc\z\zArguments_windows.cpp 是 OpenJDK 源码 中的一个文件

src\hotspot\os\windows\gc\z\zArguments_windows.cpp 是 OpenJDK 源码 中的一个文件,属于 ZGC(Z Garbage Collector) 在 Windows 平台 上的特定实现部分,主要用于处理 ZGC 启动参数(JVM arguments)在 Windows 系统下的平台相关配置。如需分析具体版本的实现细节,可提供 JDK 版本号(如 JDK 17 / JDK 21),我可给出对应代码片段和行为解释。// 更频繁 GC?

m0_37843156的博客 424

MFC获取物理内存虚拟和内存信息

str.Format(_T("总的虚拟内存:%lldKB"), m_Memory.ullTotalVirtual / 1024);str.Format(_T("可用虚拟内存:%lldKB"), m_Memory.ullAvailVirtual / 1024);str.Format(_T("总的物理内存:%lldKB"), m_Memory.ullTotalPhys / 1024);str.Format(_T("可用物理内存:%lldKB"), m_Memory.ullAvailPhys / 1024);

weixin_50698559的博客 290

别再让32位程序内存爆了!手把手教你用Visual Studio的editbin工具开启大地址支持(附dumpbin验证方法)

本文详细介绍了如何通过Visual Studio的editbin工具为32位程序开启大地址支持,突破2GB内存限制。从编译时设置到现有EXE修改,再到验证方法,提供了完整的解决方案。特别适合处理大型图像数据集或复杂科学计算的C++开发者,有效提升程序内存处理能力。

weixin_30770783的博客 377

修改mfc中的栈内存大小

 alt+f7->c/c++选项,最下面的project Option 里,在最后面加上 /zm200,200表示内存为50m,1000和2000分别表示100m和200m

james@BJ的专栏 3201

2、Windows 2000核心技术深度解析

本文深入解析了Windows 2000的核心技术与设计目标,涵盖了其多处理与多线程架构、内存管理机制、安全性实现、平台独立性策略以及互联网连接特性。通过对Windows 2000内核组件和驱动程序的分析,揭示了其在服务器市场中的优势与面临的挑战,如来自Linux的竞争及安全漏洞问题。此外,还探讨了其安全架构、潜在漏洞的防范措施以及未来发展趋势,为深入理解Windows 2000提供了全面的参考。

f9g0h的博客 94

配置SQL Server去使用 Windows的 Large-Page/Huge-Page allocations

为什麽SQLSERVER启动的时候就占用了服务器的所有内存,其中的一个原因有可能是你开启了跟踪标志834符合SQLSERVER使用大页面分配虚拟地址空间的要求,并且设置《max server memory》选项为0。TLB的工作方式类似于SQLSERVER的执行计划缓存,只要一个入口曾经被转译过下次就不需要再次转译,大页的好处是提高TLB命中率,减少内核cpu消耗。虚拟地址空间=一个进程使用的内存)是由小的内存页面构成的,那么在页面描述符表里的入口就需要相应增加,同时TLB缓存的入口数也会相应增加。

m0_70960708的博客 145

虚拟内存页面置换算法的模拟与实现

实验内容 (1)假设每个页面中可存放 10 条指令,分配给一作业的内存块(页框)数为 4。 (2)用 C 语言模拟一作业的执行过程,该作业共有 320 条指令,即它的地址空间为 32 页,目前 它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时须记录缺页的次数,并将相应 页调入内存;如果 4 个内存块中均已装入该作业,则需进行页面置换;最后显示其物理地址,并转下 一条指令。在所有 320 条指令执行完毕

qq_45977332的博客 4017

五种页面置换算法的MFC实现

在现代操作系统中,虚拟内存是一种被广泛采用的技术,它解决了实际物理内存空间限制与应用程序内存需求之间的矛盾。通过虚拟内存,系统能够运行比物理内存大的多的程序,并且为用户提供了连续的内存地址空间。页面置换算法可以认为是一种在内存资源有限的情况下进行优化的策略。页面置换算法定义了当内存中没有足够的空间容纳所有页面时,操作系统应如何选择内存中的页面进行置换。这个选择是基于一定的策略,比如最久未使用(LRU)、先进先出(FIFO)或是其他更复杂的算法。

weixin_42311427的博客 470

虚拟内存页面置换算法c语言,5虚拟内存,页面置换算法

8.1虚拟存储的需求背景虚拟内存是非连续内存分配的一个延续,非连续内存分配在存储空间内可以连续也可以不连续。虚拟内存是在非连续内存分配基础上,可以把一部分内容放到外存中去,让应用程序有更大的空间使用。需求背景:增长迅速的存储需求,程序规模的增长速度远远大于存储器容量的增长速度。理想中的存储器:容量更大、速度更快、价格更便宜的非易失性存储器。实际中的存储器:操作系统的存储抽象:虚拟存储需求:原因:计...

weixin_39583222的博客 1109

基于NE555的触摸延时开关电路设计与实现

本文详细介绍了基于NE555芯片的触摸延时开关电路设计与实现方法。通过分析NE555的单稳态工作模式,结合定时电阻、电解电容等关键元件选型,提供了一套完整的电路搭建方案。文章还包含抗干扰设计、调试技巧及常见故障处理,帮助电子爱好者快速掌握触摸延时灯的制作要点。

weixin_29268267的博客 791

RedVQA:轻量级无参考视频质量评估算法原理与工程实践

视频质量评估是计算机视觉领域的关键技术,旨在通过算法自动量化视频的观看体验。其核心原理在于模拟人眼视觉系统,从像素数据中提取并融合空域和时域特征,以预测主观质量分数。这项技术的价值在于,它能自动化处理海量视频内容的质量监控,为流媒体服务、移动设备影像优化等场景提供关键指标。无参考视频质量评估作为该领域的前沿方向,无需原始无损视频作为参考,更贴合实际应用。本文以RedVQA项目为例,深入剖析了如何利用轻量化的深度网络架构,如MobileNetV3,结合高效的时空特征融合模块,在保证评估精度的同时,大幅降低计算

weixin_28698129的博客 576

C#面:一个进程可以访问的Windows地址空间有多大?是否等于系统的虚拟内存大小吗?这两方面将对系统的设计产生什么样的影响 ?

一个进程可以访问的Windows地址空间大小取决于操作系统的位数。

那个那个鱼的博客 710

《Hadoop大数据技术原理与应用》(第2版)黑马程序员的课后习题答案

《Hadoop大数据技术原理与应用》(第2版)黑马程序员的课后习题答案

qq_36773158的博客 4656

DeepSeek hotspot/os/windows/gc/z/zVirtualMemoryManager_windows.cpp 源码分析

是 ZGC(Z Garbage Collector)在 Windows 平台上的虚拟内存管理实现。ZGC 的核心特性之一就是使用虚拟内存映射来实现高效的垃圾回收。

m0_37843156的博客 201

A-Level CS 计算机科学 考试知识点——考试介绍&第1章

前言:该系列文章是本人在给学生辅导本课程的过程中结合英文教材所总结的,该系列共分为30章,主要介绍了考试的核心知识点。若需要A-Level CS 计算机科学考试辅导也可以私信我。 目录 关于A-Level CS 计算机科学考试 考试简介 考试内容 考试时间 评分情况 第1章 信息表示 本章学习内容 1.01 数字系统 1.02 数字的内部编码 整数编码(Coding for integers) 二进制编码的十进制(Binary coded decimal——BCD) 1.03.

王俊的博客 6458

华为OD新系统机试真题 - API请求日志去重分析

华为OD新系统机试真题【API请求日志去重分析】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD4月15号机试真题【API请求日志去重分析】

qq_45776114的博客 918

windows内核 内存管理

一、几个基本的概念 1.存储器的金字塔结构 存储器从下之上依次是磁盘/flash、DRAM(内存)、L2-cache、L1-cache、寄存器,越在上面的存储器访问速度越快,同时价格也越昂贵,每一级都可以看做是下一级的缓存,内存是磁盘的缓存,cache是内存的缓存。 2.地址空间 地址空间就是一个非负正数的有序集合,如果是连续的即线性地址空间,从硬件的角度看就是处理器所能访问的存储器空间,...

weixin_30565199的博客 211

基于ESP32和OV5640的目标检测系统

本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。

reset2021的博客 329

Qwen3.5-千问 ZGC在Windows上有哪些已知的性能问题?

这些问题主要源于 Windows 的内存管理机制(如虚拟内存提交、页面文件)与 ZGC 的底层实现(多重映射、大页)之间的交互。问题描述:由于 ZGC 将同一块物理内存映射到多个虚拟地址视图(Marked/Remapped),Windows 任务管理器的“工作集(内存)”列会将这些映射重复计算。上下文切换:Windows 的用户态线程调度开销略高于 Linux,在高并发场景下,ZGC 的并发线程可能会与应用线程争抢 CPU 时间片,导致更多的上下文切换。ZGC 需要连续的虚拟地址范围来建立映射。

m0_37843156的博客 229

2026华为OD机试(C语言)真题【E卷+A卷+B卷+C卷+D卷】目录+在线OJ

华为OD机试真题题库【E卷+A卷+B卷+C卷+D卷】目录,C语言实现。

MISAYAONE的博客 11万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

64位进程空间

是操作系统为每个进程分配的虚拟内存范围,进程只能直接访问这些虚拟地址,由CPU和操作系统协同将其转换为物理内存地址。

长风破浪会有时的博客 1055

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Windows 64位操作系统内核研究:兼容、性能与安全的平衡之道

摘要: 本文系统剖析了Windows 64位内核的技术演进,重点探讨其从32位到64位的架构转型、核心模块优化及安全加固。64位内核通过WOW64子系统实现32位应用兼容性,重构虚拟地址空间(用户/内核各8TB),并利用大页内存、NUMA调度等提升性能。安全方面,结合KASLR、PatchGuard、HVCI等技术构建纵深防御体系。面向AI、边缘计算等场景,内核持续优化AI加速与能效管理。Windows 64位内核以兼容性、性能与安全的平衡,定义了现代操作系统的设计范式。

fearhacker的专栏 1236

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WinCE线程和内存管理之内存管理

同其它Windows操作系统一样,WindowsCE.NET也支持32位虚拟内存机制、按需分配内存和内存映射文件等。但是与其它Windows操作系统又有明显的不同。毕竟Windows CE是一种嵌入式实时性...

congbi3023的博客 138

深度解析:如何使用WinPmem高效进行Windows物理内存取证采集

在数字取证和事件响应领域,Windows物理内存采集是获取系统运行时状态的关键技术。WinPmem作为开源物理内存采集工具,通过创新的多方法读取机制为安全分析师提供了可靠的内存数据获取解决方案,支持从Windows 7到Windows 10的x86和x64架构系统。 ## 🔧 技术架构与实现原理 ### 核心驱动模块设计 WinPmem采用分层架构设计,核心驱动位于[src/](https:

gitblog_00091的博客 333

WinVisor安全边界深度分析:5大VM逃逸向量与共享内存风险完全指南

WinVisor 是一款基于 Windows Hypervisor Platform(WHP)API 的**虚拟机(Hypervisor)模拟工具**,它能在虚拟化环境中直接运行 Windows x64 用户态可执行文件(如 `cmd.exe`、`notepad.exe`),并实时拦截、记录每一次系统调用。正因它把"宿主机进程内存"直接映射为"客户机物理内存",其安全边界格外值得研究。本文将带你完

gitblog_00238的博客 337
下一篇: 发布一个Windows下Perl的执行器
bytekiller
博客等级 码龄27年 7粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值