gpt4 book ai didi

c++ - C中非常大的矩阵

转载 作者:搜寻专家 更新时间:2023-10-31 00:41:34 24 4
gpt4 key购买 nike

(这个问题之前已经回答了,但是解决方案不起作用或者我无法理解!!)
我想使用 2^16*2^16 的大型矩阵。该怎么做?这是我使用 malloc 的代码:

// nrows=2^16
// ncols=2^16

int **a_matrix = (int**) malloc (nrows *sizeof(int*));

for (int i=0; i<nrows;i++)
a_matrix[i]=(int*) malloc (ncols *sizeof(int));
enter code here

现在当我尝试访问 a_matrix[55000][55000] 时出现段错误

我将堆栈大小增加到无限(使用一些命令)但仍然无法正常工作。:(还有其他方法吗?

编辑:我只想存储 1/0,所以即使 bool 也能工作。但在那种情况下也是同样的问题!

最佳答案

如果您只想存储 bool 值,使用打包的位数组可以减少存储量,这可能会起作用。在 C++ 中,您将使用 std::vector<bool>std::bitset ;在 C 中,

#include <stdint.h>

unit32_t (*a_matrix)[1<<11] = malloc((1 << 16)*sizeof *a_matrix);

给你(如果 malloc 调用没有失败)一个指向 2^16 数组的指针2^16 的数组位。要访问位,请使用

((a_matrix[row][column >> 5]) >> (column & 0x1F)) & 1

最好把它变成一个函数

int bit_at(int row, int col) {
return ((a_matrix[row][col >> 5]) >> (col & 0x1F)) & 1;
}

或者也许是一个宏。

关于c++ - C中非常大的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13038021/

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