“AnyCPU”平台目标上的内存分配模式

2023-11-25

我故意在一个简单的 C# 程序中泄漏内存,以了解有关 .NET 如何管理这方面的更多信息。这是使用完成的int[]数组,每个数组大小为 1000 万,每 100 毫秒声明一次。数组的元素不会被“触及”(如分配一个值),以免将数据带入进程的工作集中:

const int BlockSIZE = 10000000;  // 10 million
const int noOfBlocks = 500;
int[][] intArray = new int[noOfBlocks][];

for (int k = 0; k < noOfBlocks; k++) {
    intArray[k] = new int[BlockSIZE];
    Console.WriteLine("Allocated (but not touched) for array {0}: {1} bytes", k, BlockSIZE);
    System.Threading.Thread.Sleep(100);
}

我正在使用 VMMap(Mark Russinovich 构建的工具)来查看内存是如何分配的。该版本是最新版本(3.25,2018 年发布),因此它了解托管堆。

在具有 8 GB RAM 的 x64 Windows 10 计算机上使用 Visual Studio 2015 来编译并生成.exe文件。取决于Platform target在项目的“构建”部分中进行设置,可以看到与如何分配内存相关的不同结果,如下所示。

When Platform target被设定为x86,提交的内存会增长到接近 2 GB 标记,然后抛出内存不足错误。该值是预期的,因为 2 GB 是 x86 架构上用户虚拟地址空间的限制(我没有使用 IncreaseUserVA,这会使该值达到 3 GB)稍后编辑:这并不完全正确 - 请参阅下面大卫的回答


在 Windows64 (wow64) 上的 Windows 下运行的 LARGEADDRESSAWARE 32 位进程具有 4GB 用户模式虚拟地址空间 (VAS),因为内核内存是 64 位,并且不需要映射到使用 32 位指针可寻址的 4GB。而且您不必使用以下命令启动 Windows/3GB switch为拿到它,为实现它。

针对 X86 进行编译时,您可能期望在 32 位和 64 位平台上有相同的行为,因此不设置 LARGEADDRESSAWARE 标志是有意义的。这也可能是向后兼容性所迫。在里面very过去,一些 32 位库使用指针的高位,因此历史上将 32 位程序限制为 2GB 是一种安全设置。

AnyCPU+Prefer 32 位是较新的设置,默认设置为 LARGEADDRESSAWARE,以便您更好地访问 64 位平台上的资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“AnyCPU”平台目标上的内存分配模式 的相关文章

  • 按成员序列化

    我已经实现了template
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 从 Android 检索 GPS 修复中使用的卫星数量

    我正在尝试检索 GPS 修复中使用的卫星数量 我实现了两种不同的方法 如下所示 package ti utils import android app Activity import android content Context impo
  • 我可以复制或拦截 Java 中的输出流吗?

    我想拦截标准输出流 然后将内容复制到另一个流 但我也希望保持标准输出流像原来一样 我可以用 Java 实现这一点吗 您可以使用类似示例的内容TeeOutputStream在这里解释编写您自己的 Java I O 流类 基本上 您创建一个 T
  • 目前在 Jupyter/iPython 中动态更新绘图的正确方法是什么?

    在答案中如何在 ipython 笔记本中动态更新循环中的绘图 在一个单元格内 给出了如何在 Python 循环中动态更新 Jupyter Notebook 内的绘图的示例 然而 这是通过在每次迭代中销毁并重新创建绘图来实现的 并且其中一个线
  • 将缺失的日期添加到 pandas 数据框中

    我的数据可以在给定日期有多个事件 也可以在某个日期没有事件 我记录这些事件 按日期计数并绘制它们 然而 当我绘制它们时 我的两个系列并不总是匹配 idx pd date range df simpleDate min df simpleDa
  • 是否存在占用 0 字节的 C++ 类型

    我试图声明一个占用零字节的 C 变量 它在一个联合体中 我从 int 0 类型开始 我不知道这是否实际上是零字节 尽管 sizeof int 0 是 0 我需要一种更好的方法来声明 0 字节类型 并且希望可以将其类型定义为 nullType
  • 无法使用 127.0.0.1 连接到 mysql

    使用以下代码我可以连接到mysql mysql connect localhost username 但如果我改变localhost to 127 0 0 1我收到以下错误 无法连接到 127 0 0 1 上的 MySQL 服务器 13 为
  • 命令行参数的Shell脚本密码安全

    如果我使用密码作为命令行参数 则它在系统上是公开的ps 但是如果我在 bash shell 脚本中并且执行如下操作 somecommand p mypassword 这仍然会出现在进程列表中吗 或者这样安全吗 子流程怎么样 不安全吧 协进程
  • 图库/AdapterView 子可绘制状态

    我正在使用图库视图 其中与每个项目相对应的视图都非常重要 并且由文本和多个按钮组成 当我单击以拖动图库视图 不在按钮之一上的某处 时 按钮的可绘制状态更改为按下 并且看起来好像所有按钮当前都被按下 此外 选定状态也会发生相同的行为 例如 子
  • 轻量级8字节哈希函数算法

    我需要从可变长度字符串中提取 8 字节摘要 因此我正在寻找将在 c c 中实现的算法 这将是微控制器上数字签名过程的一部分 因此它必须是 可以用几行代码编写 因为必须保留尽可能少的固件 资源消耗低 特别是RAM 最好小于100字节 足够强大
  • 如何在 Matlab 中打开 DBase 文件(.DBF)?

    我已经在 Matlab Central 中进行了谷歌搜索 但找不到任何直接在 Matlab 中打开 DBF 文件的方法 TMW File Exchange 中有一些对 DBFREAD 函数的引用 但它不再可用 真的有问题吗 我确实有数据库工
  • 如何从控制器外部访问登录用户?

    我正在使用 SignalR 处理来自客户端对我的 MVC3 应用程序的点击 每次用户单击某些内容时 我都需要验证登录的用户 如果这是在 MVC3 控制器内 我会 if User Identity IsAuthenticated string
  • 如何使用 Firebase 托管部署 Angular 2 应用程序?

    我想知道使用 Firebase 托管部署简单的 Angular 2 应用程序所需的步骤 这些是步骤 1 npm install g firebase tools 这将安装我们将在以下步骤中使用的 firebase CLI Firebase
  • Gfortran:将纯函数视为普通函数以进行调试?

    我需要调试一些pure使用 gfortran 编译的 fortran 程序中的函数 有什么办法可以忽略pure声明 以便我可以使用write print等在这 些pure无需付出很大努力就能发挥作用 不幸的是 仅仅删除它并不容易pure陈述
  • 正则表达式验证字符串仅包含字符(非特殊字符)、空格和数字

    我正在使用 Ruby on Rails 3 0 9 我想验证一个只能包含字符 不是特殊字符 不区分大小写 空格和数字的字符串 在我的验证代码中我有 validates name presence gt true format gt with
  • 使用 MassTransit 使用交换和路由密钥发布消息

    我已经关注 MassTransit 几个星期了 我对它的可能性很好奇 但是 我似乎无法完全正确地理解这些概念 预期行为我想将消息发布到带有路由密钥的 直接 交换 该路由密钥绑定到两个不同的队列以执行其他活动 当我尝试使用 MassTrans
  • 警告:尝试在其视图不在窗口层次结构中的 ViewController 上呈现 ViewController

    我已经查看了相关问题 但没有解决我的问题 我正在尝试使用dismissViewControllerAnimated animated completion and presentViewControllerAnimated animated
  • 如何在使用 slimerjs 在 casperjs 中运行测试脚本时最大化浏览器窗口

    使用 slimerjs 引擎在 casperjs 中运行测试脚本时 我无法查看完整窗口 谁能帮我增加 mozila 浏览器窗口的大小 当然 在 casper 中使用 phantom slimer viewportSize 选项 casper
  • Java 覆盖特定区域设置的区域设置

    我在用着NumberFormat getCurrencyInstance format amount 将货币从 BigDecimal 格式化为字符串 这按预期工作 问题是我们的主要目标是荷兰市场 而默认的荷兰语格式很奇怪 让我解释一下 当格
  • 在我的标签元素上设置 height: 100% 不起作用

    我尝试设置height 100 在标签中 但它不起作用 为什么不 field label color 3E3E3E font weight bold width 80px display block float left margin to
  • “AnyCPU”平台目标上的内存分配模式

    我故意在一个简单的 C 程序中泄漏内存 以了解有关 NET 如何管理这方面的更多信息 这是使用完成的int 数组 每个数组大小为 1000 万 每 100 毫秒声明一次 数组的元素不会被 触及 如分配一个值 以免将数据带入进程的工作集中 c