【发布时间】:2023-04-03 20:30:01
【问题描述】:
正如标题所暗示的那样,当您给出地址时,是否可以开始一个数组。即如果我的起始地址是10002432,则基本上&array[0] = 10002432 和array[1] 将存储在下一个顺序地址中。我可以使用指针复制到所述地址,但我想使用动态分配的数组而不是指针。我当前的代码如下使用指针。我尝试了目前在线的各种解决方案,但没有一个能够提供明确的解决方案。
我正在考虑创建一个重载的 new 运算符,但我也卡住了,因为在重载的 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;
}
}
我们将不胜感激。
【问题讨论】:
-
Google 的短语是“placement new”,它允许您在内存中的指定位置构造对象。
-
在问题中添加您想要这个的原因可能会有所帮助。建议:轻松开始。确保您的代码将在正常分配给程序的缓冲区中正常工作。在尝试使用您的进程甚至可能不拥有的内存之前,先消除简单的错误。
-
顺便说一句,这段代码是错误的:
Pointer = Pointer + 4. -
原地分配数组的原因是什么?我猜你遇到了问题 XY 偏差。
-
@TortelliniTuesday,确切地说,它会跳转
4*sizeof(int),我猜这不是作者的意思。
标签: c++ arrays memory-management