正如标题所示,当您指定地址时,是否可以启动数组。即,如果我的起始地址为10002432
,则基本上&array[0] = 10002432
和array[1]
将存储在下一个顺序地址中。我可以使用指针复制到上述地址,但我想使用动态分配的数组代替指针。我当前的代码如下,这是使用指针的。我尝试了当前在线的各种解决方案,但是没有一个能够提供确定的解决方案。
我曾想制作一个重载的new
运算符,但我也受其困扰,因为在重载的新运算符的基础上,我们使用malloc
,它也不允许指定起始地址。
我正在模拟器(gem5)中运行此代码,在这里我可以控制内存地址,因为我可以指定虚拟地址如何映射到物理地址。
int main(int argc, char const *argv[])
{
uintptr_t address = 10002432;
int *Pointer = (int*) address;
int *Pointer2 = Pointer;
for (int i = 0; i < 32; ++i)
{
*Pointer = i;
Pointer = Pointer + 4;
}
for (int i = 0; i < 32; ++i)
{
printf("%d\n",Pointer2 );
Pointer2 = Pointer2 + 4;
}
}
非常感谢您的协助。
int main(int argc, char const *argv[])
{
typedef int intarray[32];
void* address = (void*)10002432;
intarray array = new(address)intarray(); //create array at the address
ScopeGuard closeIt = MakeGuard(std::destroy, &array); //destroy array at scope end
for (int i = 0; i < 32; ++i)
{
array[i] = i; //MUCH simpler syntax
}
for (int i = 0; i < 32; ++i)
{
printf("%d\n", array[i]); //MUCH simpler syntax
}
}
(https://www.drdobbs.com/cpp/generic-change-the-way-you-write-excepti/184403758中的ScopeGuard)>