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() 视为彼此的替代品,它们都有各自的用例。
我试图理解它,但到目前为止我所理解的是使用 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() 视为彼此的替代品,它们都有各自的用例。