gpt4 book ai didi

c++ - 动态二维数组 : Space Issue

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

我正在使用以下代码创建动态二维数组。

uint32_t** arrays = new uint32_t*[1000]; 
uint32_t number = take input from console ;
arrays[0] = new uint32_t[number];
number = take input from console ;
arrays[1] = new uint32_t[number];
delete arrays[0] ;
number = take input from console ;
arrays[0] = new uint32_t[number] ;

我正在使用 64 位 Unix 机器来执行上面的代码。

在上面的代码中,机器使用 64 位指针指向二维数组,这就是代码占用更多空间的原因。

任何人都可以帮助我,如何将代码转换为 32 位指针?或者另一种解决空间复杂性的方法?我不想使用 vector 的 vector ,因为我的教授没有要求这样做。

最佳答案

实际上,您的代码已经进行了相当多的内存优化。

您在第一行分配了 1000 个 64 位指针。这是不可避免的,因为那是您的机器使用的。然而,这只需要 8000 字节,现在几乎不值得为优化付出努力。

在接下来的几行中,您为 int32_t 数组动态分配空间,每个条目仅占用 4 个字节。因此,如果您分配 3000 万个条目,它将占用 120.000.000 个字节。我认为您错误地认为这个辅助数组将占用 3000 万 * 8 字节 = 240.000.000 字节,但事实并非如此。只有指针是 64 位的,数据本身会根据需要占用多少空间。

附录:我想补充一点,正如一些人所建议的那样,分配一个二维数组实际上会浪费更多的内存,因为您显然不知道每个辅助条目的长度。您的解决方案只分配所需的空间。

关于c++ - 动态二维数组 : Space Issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14102404/

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