在 C++ 中使用 new 分配大于 2GB 的单个对象(在 Windows 上)

2024-01-10

我使用的是 Windows,x64 模式。在 Visual Studio 上使用 MSVC 编译。这new当我这样做时,运算符似乎没有按预期工作:

char* buf = new char[1LLU << 32];

但是如果我传入一个变量而不是直接输入大小,它就可以正常工作:

uint64_t sz = 1LLU << 32;
char* buf = new char[sz];

查看汇编代码,编译器忽略了我提供的大小,只是xor ecx, ecx我相信这只是将 0 传递给new操作员。

这实在令人费解!标准中是否指定了一些我不知道的规则?

p.s. char* buf = new char[1LLU << 31];工作没有问题。所以我认为这与我正在使用的整数的大小有关。但在文档中,new接受一个size_t作为参数,在 x64 上应该是uint64_t.

VirtualAlloc()/HeapAlloc()是很好的替代品,使用起来比new在此背景下。

完整代码(注意*尝试在 Visual Studio 中本地重现此代码):

#include <iostream>
#include <cstdint>

int main()
{
    char* ptr = new char[1LLU << 32];
    memset(ptr, 0, sizeof(char) * (1LLU << 32)); //Access violation writing location...
}
#include <iostream>
#include <cstdint>

int main()
{
    uint64_t sz = 1LLU << 32;
    char* ptr = new char[sz];
    memset(ptr, 0, sizeof(char) * (1LLU << 32)); //no problem
}

Add const您的声明:

const uint64_t sz = 1LLU << 32;

你会得到同样的错误:

这是数组分配的“安全”MSVC 阈值,但由于您提供了非常量大小变量,编译器不会在编译时解析它。

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

在 C++ 中使用 new 分配大于 2GB 的单个对象(在 Windows 上) 的相关文章

  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • forEach 不是函数错误

    当我尝试使用 foreach 迭代 JSON 对象时 出现此错误 有人可以帮忙吗 这是我的JS function dateTimeChecker ajax url get booked php method get dataType tex
  • Java找不到构造函数

    像大多数新程序员一样 我有一个我无法解决的小但重要的问题 我的程序不会拉动我的构造函数 我尝试了很多不同的方法 但似乎无法弄清楚 任何帮助将不胜感激 Error EmployeeTest java 13 cannot find symbol
  • Symfony5 使用 AJAX 表单多选(选择列表)数据自动更新

    我有一个位置表单 其中包含三个 选择 选择列表 国家 地区和部门 这些 选择 默认包含所有国家 地区和部门的列表 我想让我的用户首先选择一个国家或地区或部门 我想做的事 当用户选择一个国家时 区域中的数据会根据该国家 地区而变化 地区和部门
  • 类是原始类型。对泛型类型 Class 的引用应该参数化

    我有以下课程 来自简单的 Spring 教程 public class CarValidator implements Validator public boolean supports Class aClass return Car cl
  • 有没有办法在 Flask WTForms 中创建数据列表字段?

    有谁知道一种方法来创建datalist在 Flask 中使用 WTForms 字段 我知道如何创建一个SelectField但如果列表中没有 我需要允许用户输入自己的值 这就是我想做的http www w3schools com tags
  • 引用Java属性文件中的其他变量[重复]

    这个问题在这里已经有答案了 可能的重复 如何引用java util Properties中的另一个属性 https stackoverflow com questions 872272 how to reference another pr
  • 无法禁用日志消息

    我在摆脱 Spring 生成的调试消息时遇到了一些麻烦 类似于以下消息 有数千个这样的条目 19 58 08 380 main DEBUG o s b f s DefaultListableBeanFactory Creating shar
  • “为什么运行时异常是不可恢复的?”

    在Java文档中 我看到了定义 如果可以合理地预期客户端会从异常中恢复 则将其设为受检查的异常 如果客户端无法执行任何操作来从异常中恢复 请将其设为未经检查的异常 未经检查的异常 争议 https docs oracle com javas
  • 如何使用 ProcessBuilder 与 CLI 程序持续交互

    我经常使用通过 docker 容器访问的 CLI 程序 进入容器后 我就可以开始使用相关的 CLI 程序 我遇到的问题是我想继续与同一个命令行实例交互 基本上我正在尝试创建一个将在 CLI 程序 之上 运行的 GUI 程序 我只是不知道如何
  • 为 AWS 设置“Stackdriver Kubernetes 监控”

    Google Cloud Platform 在 Kubecon 2018 上宣布了 Stackdriver Kubernetes Monitoring 看起来棒极了 我是一名运行着几个 Kubernetes 集群的 AWS 用户 我立即羡慕
  • 使用HMS Toolkit添加HMS和GMS时找不到com.huawei.hms:hwid:5.3.0.301 &推送套件

    我正在尝试将 HMS 添加到我们的 GMS 第一个应用程序中 这是一个庞大的应用程序 因此我们决定尝试 HMS Toolkit 转换软件 该工具包添加了必要的依赖项和模块 并在需要时进行了适当的替换 但是当我尝试构建我们的应用程序时 我收到
  • 异常:类型错误:无法设置未定义的属性“消息”

    在升级旧的 Angular 2 项目的许多依赖项后 我在运行时收到以下错误 EXCEPTION TypeError Cannot set property message of undefined ErrorHandler handleEr
  • gSoap EWS“错误 500:内部服务器错误”

    我在使用 ews gSoap 时遇到一些问题 我有下一个代码 ExchangeServiceBindingProxy proxy new ExchangeServiceBindingProxy endpoint c str soap pSo
  • 如何使用 Spark 数据框评估 Spark Dstream 对象

    我正在编写一个 Spark 应用程序 我需要根据历史数据评估流数据 这些数据位于 SQL Server 数据库中 现在的想法是 spark 将从数据库中获取历史数据并将其保存在内存中 并根据它评估流数据 现在我得到的流数据为 import
  • 如何在R中动态插入带有模式的列?

    这是一个跟进问题 https stackoverflow com questions 73938635 rename a column based on the original columns name r 73938710 noredi
  • 有没有办法在浏览器中编译代码(C/C++)?

    这个问题可能听起来很疯狂 有没有基于浏览器的编译器 本地客户端 https developer chrome com native client是一个沙箱 用于在浏览器中高效运行已编译的 C 和 C 代码 你可以探索这个
  • ReactJS:来自 State 的动态复选框

    我有一个动态元素的集合 所以我事先不知道该集合的内容是什么 我想动态渲染这些复选框 并默认将它们全部选中 您应该能够取消选中这些框 这会在渲染中触发另一个地图功能 所以基本上这是我的过滤器 我在国家设置上苦苦挣扎 我正在考虑以下内容 我想通
  • “此应用程序正在从后台线程修改自动布局引擎”

    我遇到以下错误 此应用程序正在从后台线程修改自动布局引擎 这可能会导致引擎损坏和奇怪的崩溃 每当我尝试将图像视图加载到表视图中时 相关代码如下 override func tableView tableView UITableView ce
  • 在 Gnuplot 中自定义颜色范围

    我有一个运行良好的等值线图 它为不同的值生成等量的颜色 我想要的是在右侧生成标签 以便为每个块提供正确的颜色 当前结果 我想要的是每个块都有这个值 300 100 70 30 10 1 0 编辑 当我添加这段代码时 set cbtics 3
  • 在 C++ 中使用 new 分配大于 2GB 的单个对象(在 Windows 上)

    我使用的是 Windows x64 模式 在 Visual Studio 上使用 MSVC 编译 这new当我这样做时 运算符似乎没有按预期工作 char buf new char 1LLU lt lt 32 但是如果我传入一个变量而不是直