gpt4 book ai didi

c - 指定初始化器,浪费未使用和不必要的内存?如何只分配数组中需要的部分?

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:46 24 4
gpt4 key购买 nike

我想使用指定的初始化器,但其他未初始化的索引怎么办?

他们也在消耗我的内存吗?

例如:

编辑部分:{

整数数组[590] = {[2] = 1};

注意:我不使用其他数组索引,像这个例子我只想使用一个,但我会为另一个索引分配内存?

(好吧,我知道这个例子很模糊,我不想要一个 int 或任何其他类型,我不知道如何解释我想要什么。但我认为解释它是没有必要的,因为我的问题不是“如何完成这个”我的问题是“当我这样做时会发生什么?”或“它是如何实现的?”,非常感谢。)

这里面的内存呢? 我浪费了590 block 内存,还是只有一 block ? 如果第一个是正确的,我怎么能只花一个?

如果我这样做:?

整数数组[] = { [2] = 1, [590] = 2};

我会分配590 block 内存,还是只分配两 block ?

非常感谢!

最佳答案

让我们问编译器先生吧!

#include <stdio.h>
int main( int argc, char ** argv )
{
int array[] = {[2] = 1, [590] = 2};
printf("sizeof(array) is %d bytes\n", sizeof(array));
}

调查显示:

$ gcc initsize.c
$ ./a.out
sizeof(array) is 2364 bytes

是的! 591 * 4 = 2364。

在这里,您已经在堆栈上分配了一个包含 591 个元素的整数数组。它必须被分配;编译器不知道你可以用它做什么(例如,将它传递给一个它一无所知的库函数)。你告诉它大小是 591 个元素,它服从......

附言有许多“稀疏矩阵”C 库;只需谷歌搜索“C 库稀疏矩阵”。但是,对于 591 个元素的 vector ,它们完全是多余的。现在,如果您有 10,000 个这样的 vector ,那就是另一回事了。

关于c - 指定初始化器,浪费未使用和不必要的内存?如何只分配数组中需要的部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2451742/

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