gpt4 book ai didi

c++ - 是否有可能拆分内存块或在中间访问它

转载 作者:行者123 更新时间:2023-11-30 03:53:02 25 4
gpt4 key购买 nike

我正在寻找“拆分”的选项 allocated memory , (之前分配了 malloc )来存储一些 objects of different type and size在零件中。

我只是通过移动 pointer 来尝试它并保留 memory block作为一部分,例如:

int main()
{
void* ptr1 = malloc(sizeof(int) * 3);
int* ptr2 = (static_cast<int*>(ptr1) + sizeof(int));

ptr1 = new (ptr1)int(5);
ptr2 = new(ptr2) int(7);

return 0;
}

(是的,没有 free(),我知道,但这只是一个例子)

问题是,是移动pointer adress这种方式可靠并且可以在每个 c++ 编译器下使用吗?或者是否有更好的可能性来做到这一点,甚至可以拆分 memory block在几个部分。

(我既不想使用 array 也不想使用 3 次 new/malloc 并且请不要回答诸如“你为什么要这样做?!”之类的问题我想这样做... )

最佳答案

均质容器

改用std::array:

std::array<int, 3> arr;
arr[0] = 5;
arr[1] = 7;
arr[2] = 9;

不需要动态分配,也不需要手动内存管理。这样您就可以拥有连续的内存并且可以轻松访问每个元素。不仅如此,您还可以免费获得符合标准的代码。

如果你真的需要动态分配(因为例如你的代码使用重对象),那么只需使用 std::vector 如下:

std::vector<int> arr(3);
arr[0] = 5;
arr[1] = 7;
arr[2] = 9;

我知道。好得令人难以置信。


异构容器

另一方面,如果你想要一个不同大小的容器,你可以使用std::tuple,比如:

std::tuple<Type1, Type2, Type3, ...> tuple;

变体

最后,如果您想要实现的是类似union 的东西,请查看您的评论:

to store some objects of different type and size in the parts.

然后您可以改用 boost::variant,这将使您能够在同一内存位置高效地存储不同类型的对象。

如果您事先(在编译时)不知道所有可能的类型,那么使用 boost::any 可能是个好主意。

关于c++ - 是否有可能拆分内存块或在中间访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com