VirtualAlloc分配的内存和std::vector分配的内存有什么区别

what is the difference between memory allocated by VirtualAlloc and the memory allocated by std::vector

我试图理解它,但到目前为止我所理解的是使用 VirtualAlloc 可以为大缓冲区分配大内存页面,例如 std::vector 但是 VirtualAlloc 我可以提交页面我可以设置权限读取、写入或执行,但我不能用 std::vector 做到这一点,我可以吗?我基本上是在尝试分配内存来构建我从(磁盘)读取的 pe 文件。我还想使用 std::vector,因为它使用 RAII 自动完成分配内存的更现代的方式。

std::vector 是一个容器,它在后端管理数组并提供帮助您轻松与其交互的功能,并且能够增加和减小它的大小。这是作为 C++ 标准库的一部分实现的。

VirtualAlloc() 是一个 Windows API 函数,仅适用于 Windows。它分配内存页和 returns 已分配内存的地址。

按预期使用 std::vector,您不知道数组的地址,应避免直接与其交互。

如果您需要一个可以扩展或缩小大小的数组,请使用 std::vector

如果需要创建动态变量,使用指针和关键字'new'

#include <iostream>
#include <Windows.h>

int main()
{
    int* new_ints = new int[300];

    //do whatever

    delete[] new_ints;

    return 0;
}

如果您在 Windows 上分配内存并且使用 'new' 关键字不符合您的需要,请考虑使用 VirtualAlloc() 作为替代方法。我从来不需要 VirtualAlloc() 但我使用了 VirtualAllocEx() 因为它允许你在外部进程中分配内存。

我不会将 std::vector 和 VirtualAlloc() 视为彼此的替代品,它们都有各自的用例。