arrays - 声明数组时指定的大小是否比要求的大?

arrays - 声明数组时指定的大小是否比要求的大?

在 C 语言中,当我们不知道要保存在数组中的数据的大小时。通常,我们指定的尺寸大于要求的尺寸。

首先,如果我们在编译时不知道大小,我们通常不需要也不指定比要求更大的大小。这可能是你的印象,但事实并非如此。

在这种情况下使用了两种方法。

使用可变长度数组(VLA) 或动态内存分配。

任何 C 实现都不支持 VLA。它们最初是在 C99 中发明的,对于符合 C99 的实现是强制性的,但在符合后来的 C 标准的实现中,不需要支持VLA 。因此,使用 VLA 会使您的代码不可移植(如果可以使用的话)。

此外,处理错误的能力在使用 VLA 时更差。您无法检查 VLA 的分配是否成功。

如果可移植性和/或错误处理很重要,您最好使用动态内存分配。

分配数组 VS。变长数组

与 malloc/free 相比,使用 C99 VLA 是个好主意吗?

使用可变长度数组是否安全?

何时在 C 中使用可变长度数组,但何时使用动态分配?

除此之外,如果您喜欢动态内存,您可以调整大小并释放不再需要的内存,而 VLA 无法做到这一点。

声明数组时指定的大小是否比要求的大?

谈到在编译时固定大小的静态分配数组,通常指定比所需更大的大小并不是一个坏习惯。当然,您可能会浪费一些内存,但当您需要更多内存或尝试意外访问超出范围的内存时,保持安全总是一个好决定,而不是遇到真正的严重问题,这会调用未定义的行为。

但是,如果浪费大小的数量很大并且可能大小之间的范围非常大,那么您应该真正使用动态内存分配。例如,您不知道是否需要预先设置 10 个或 100000 个元素,并且为了安全起见分配了 100000 个元素。那将是一种不好的做法。

在这种情况下使用动态内存也更好,因为堆栈没有堆内存那么大。

简短摘要:如果您真的不想浪费任何内存并且想要安全,请使用动态内存分配而不是其他任何东西。

相关推荐

如何在《热血无赖》中设置中文语言:详细步骤与技巧!
365娱乐游戏是什么

如何在《热血无赖》中设置中文语言:详细步骤与技巧!

📅 08-07 👁️ 3082
如何给视频配上合适的音乐
你们的365还进得去吗

如何给视频配上合适的音乐

📅 07-07 👁️ 7786
中国快递:行业现状、九大平台特色比较与考虑因素
你们的365还进得去吗

中国快递:行业现状、九大平台特色比较与考虑因素

📅 08-08 👁️ 6382