为给定特定内存地址开头的数组的动态内存分配

问题描述 投票:0回答:1

正如标题所示,当您指定地址时,是否可以启动数组。即,如果我的起始地址为10002432,则基本上&array[0] = 10002432array[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;
    }

}

非常感谢您的协助。

c++ arrays memory-management
1个回答
0
投票
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)>

© www.soinside.com 2019 - 2024. All rights reserved.