如何在我指向的andress上动态分配内存?

How to dynamically allocate memory on andress whom I point to?

你好 我想创建自己的动态数组(向量)class,但不知道如何在我指向的地址上分配内存。在函数添加中,我添加了如下行: int * object = new (this->beginning + this->lenght) int (paramValue); 但是 visual studio 显示错误消息 "operator new cannot be called with the given arguments"。如何让它工作,我应该将哪些参数发送给 new 运算符?

(我不确定你的问题,但是....)

您可能想使用 placement new 运算符(但要实现 <vector> 之类的东西您不需要它)。然后你需要 #include <new>

但您可能不需要它。只需从您的构造函数中调用 plain new,并从您的析构函数中调用 plain delete。类似于 int*arr = new int[length];(在构造函数中)和后来的 delete[] arr;(在析构函数中)。

(看来你误会了什么;我建议花几天时间读一本好书C++ programming

how to allocate memory on address whom I point to

信息不足 -- 什么样的系统?定制硬件? OS?


在桌面上,您可以使用 2 个步骤。您使用类似以下内容分配一个字节块:

uint8_t* myMemoryBlock = new uint8_t[1000];  // 1000 byte block

然后您可能会考虑使用 'myMemoryBlock' 在地址 "you point to" 处使用 placement new,并进行强制转换。

在桌面上,动态内存系统可以这样使用...

但是,如果您打算以任何方式创建用户定义的类型,只需新建该类型,并让动态内存位于它可能的位置,而不是将其定位在 myMemoryBlock 上。

在桌面上,(通常)没有您的用户权限级别可执行文件可以使用 'new' 访问的内存。所有其他内存都受到保护。

mmap on Linux 将设备或文件映射到您的可执行文件内存范围。我对这些设备不熟悉,但是我对文件使用过mmap。


更新 2017/03/19

注 1 - 用户权限级别的任务通常被阻止访问其他/特殊内存。

注 2 - 内存地址,如上面的 'myMemoryBlock',是虚拟的,而不是物理的。这包括代码地址、自动内存地址、动态内存地址。如果您的处理器有内存管理硬件支持,您的代码会特别努力访问内存或其他地方的物理地址。


在单板计算机 (SBC) 上(带或不带 OS)我希望您希望 'allocate' 的地址不在 'dynamic' 内存由板级支持包 (BSP) 设置。

在这种嵌入式系统(在 SBC 上)上,某人(架构师)将 'mapped' 这个 'special' 内存分配到一个地址范围,该地址范围未用于其他目的(即不属于动态记忆)。在这里,您只需找出地址是什么,然后通过将 uintXX_t 值转换为适当类型的指针来使用它。类似于:

myDataType* p = reinterpret_cast<myDataType*>(premappedAddress);

有关详细信息,您应该查找其他讨论嵌入式系统的站点。