问题标签 [virtualalloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
326 浏览

c++ - 我可以(ab)对游戏中的每个类似矢量的容器使用 VirtualAlloc 吗?

想象一下我在做一个游戏

  • 我知道它将在 64 位系统、64 位操作系统上运行
  • 游戏的内存预算是固定的2(或 4)Gibibytes

这是否意味着在Virtual Address Space该过程的 64 位中,我会得到 32 位来随意玩?

例如,我可以为游戏中的每个容器(容器 = 类似的东西std::vector)使用2 GBVirtualAllocMEM_RESERVE内存吗?

添加新元素时,会根据需要编辑新元素pages(大约 64K)MEM_COMMIT。随着容器死亡,相应地释放内存VirtualFree

出于好奇:

  1. 这在技术上可行吗?

  2. 是否有任何性能原因不这样做?


编辑:澄清:如果游戏中有 10000 个容器,那将保留2GiB * 10000 内存 - 但提交的内存将小于 2(或 4)GiB。

这 10000 个容器也可以增加到 2^16 个容器(或者地址空间允许的任何数量)。

0 投票
1 回答
141 浏览

ruby - 在 windows VirtualAlloc 指针上安装 Puma 为空

我确实检查了其他问题,大多数人都遇到了问题OpenSSL。我确实尝试了安装时提到的其他解决方案,OpenSSL但没有帮助。

Puma尝试安装by时收到以下错误消息gem install puma

系统规格:

  • OpenSSL 版本:OpenSSL 1.0.2j 26 Sep 2016
  • 红宝石版本:ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
  • 操作系统:Windows 10
  • 开发套件:installed
0 投票
3 回答
240 浏览

c++ - CopyMemory 复制比分配的 VirtualAlloc 更多的字节怎么办

请看这段代码,在我的机器上,它不会引发错误,但我不明白为什么我可以复制比分配的 VirtualAlloc 更多的字节,这个操作安全吗?

我分配 3 个字节,但将 7 个字节复制到内存中。

0 投票
3 回答
5771 浏览

pointers - 将指针转换为字节切片

Golang中的Mmap()系统调用返回一个类型,而底层系统调用实际上返回一个指针。它是如何做到的?x/sys/unix []byte

更具体地说,在Golang 开发人员的这个VirtualAlloc包中,函数只是返回一个指针。如何将其转换为字节切片,就像在 Unix 包中所做的一样?

0 投票
1 回答
4304 浏览

c++ - 如何在 C++ 中将值放入由 VirtualAlloc 分配的内存中?

我正在尝试学习如何使用 VirtualAlloc 和 VirtualFree 函数。

我已经阅读了 msdn 关于VirtualAllocVirtualFree的参考资料,并了解了如何使用它们(至少在基本层面上)。

问题是我找不到如何将值放入分配的内存中。

我试图编写一个简单的 c++ 应用程序:
1. 使用 VirtualAlloc 保留 3000 字节的内存。
2. 提交保留的内存。
3. 将 char 类型的值放入提交的内存中。
4. 使用 VirtualFree 释放内存。

当然这给出了:

所以我的问题是如何正确地将值放入 C++ 中 VirtualAlloc 分配的内存中?

我也找到了这个例子,但它没有编译,我无法让它工作。

0 投票
1 回答
105 浏览

c++ - 使用虚拟内存系统调用分配原子数组是否安全?

我正在开发一个内存数据库,我的系统需要大量std::atomic_int对象,这些对象大致充当数据库记录的锁。现在我更愿意使用 VM 系统调用来分配这些锁,例如mmap在类 Unix 系统和VirtualAllocWin32/64 上。这有几个原因,其中只有一个不需要显式初始化内存(即,由 VM 系统调用分配的内存保证由操作系统清零)。所以,我基本上想这样做:

我的主要问题是这段代码是否安全。我直观地期望代码可以在任何合理的平台上使用现代编译器工作:mmap保证返回与 VM 页面边界对齐的内存,因此std::atomic_int应该遵守任何对齐要求,并且构造函数std::atomic_int不会初始化值所以有只要以合理的方式(例如,使用__atomic_*GCC 和 clang 的内置函数)实现长时间的读取和写入,就没有不调用构造函数的危险。

但是,我可以想象,根据 C++ 标准,这段代码不一定是安全的——我这样想对吗?如果这是正确的,是否有任何检查,如果代码在目标平台上成功编译(即,如果实现std::atomic_int是我期望的那样),那么一切都按我期望的那样工作?

与此相关,我希望以下代码(其中std::atomic_int未对齐属性)在 x86 上中断:

我认为这不应该起作用的原因是因为在 x86 上合理实现std::atomic_int::storewithstd::memory_order_relaxed只是一个正常的举动,它保证仅对字对齐访问是原子的。如果我对此是正确的,是否可以在代码中添加任何内容以防止此类情况发生并可能在编译时检测到此类问题?

0 投票
1 回答
166 浏览

c - 将 DLL 加载到用户定义的地址

如何将 DLL 加载到用户定义的内存地址中,或者是否可以在使用loadlibrary()函数加载 DLL 后更改 DLL 地址。

我尝试使用VirtualAllocEx()分配内存地址并将DLL加载到远程进程。DLL 正在加载到远程进程中,但地址不同。

我也尝试过使用rebaseimage()函数,但加载 DLL 后内存地址发生了变化。

0 投票
1 回答
485 浏览

virtualalloc - VirtualAlloc 失败

我想把自己的ImageBase设置为0x2000000,然后再读另一个EXE程序到它的ImageBase,当然一般是0x400000,但是我用VirtualAlloc申请空间的时候,总是失败,GetLastError是0x1e7(487),当然,我也试过只加载ntdll.dll程序,同样失败,如何解决?

部分代码如下:

0 投票
0 回答
87 浏览

c - VirtualAlloc() 在某些内存地址上工作,但不在其他地址上

我正在运行一个名为 VMdriver5.exe 的程序(我附加的图像的左侧),它创建了另一个名为 VMmapper.exe 的程序的进程。在 VMdriver5.c 代码中,它获取其 PID(使用 GetCurrentProcessId())并在创建时将其 PID 传递给 VMmapper.exe,这样 VMmapper 会显示 VMdriver5.exe 的内存布局,以便我可以看到虚拟内存选项。

VirtualAlloc 在可用内存区域上失败

我想知道是否可以得到一些帮助,因为当我在某些内存地址上调用 VirtualAlloc() 时,它工作正常。但是,如下图所示,有一个内存区域有 503,808 字节的空闲空间,我尝试使用 VirtualAlloc()保留该空间的 65,536 字节,但由于某种原因它失败了。我将内存地址 00185000 作为参数之一传递。

我正在使用的代码是这样的:

如果需要,我将不胜感激,并可以提供更多代码或信息。谢谢大家,复活节快乐。

0 投票
1 回答
985 浏览

python - VirtualAlloc 和 Python - 访问冲突

非常简单的 python 脚本给了我访问冲突,我就是不知道为什么。

错误: