gpt4 book ai didi

arrays - 声明数组时指定的大小是否超出要求是一种不好的做法?

转载 作者:行者123 更新时间:2023-12-04 09:22:03 24 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

去年关闭。




Improve this question




在 C 语言中,当我们不知道要保存在数组中的数据的大小时。通常,我们指定的尺寸大于要求。这不是说我们在滥用内存吗?因为,数组以顺序方式存储在内存中,所以即使它们当前没有被使用,处理器也不会总是保存这些块以备将来使用?

最佳答案

In C Language, when we don't know the size of the data we're going to hold in the array. Generally, we specify more size than required.


首先,如果我们在编译时不知道大小,我们不需要也不指定比一般要求更多的大小。这对你来说可能是一种印象,但事实并非如此。
在这种情况下使用了两种方法。
使用可变长度数组 (VLA) 或动态内存分配。
任何 C 实现都不支持 VLA。它们最初是在 C99 中发明的,对于符合 C99 的实现是强制性的,但在符合后来的 C 标准的实现中,不需要支持 VLA。因此,使用 VLA 会使您的代码不可移植(如果可以使用的话)。
此外,当使用 VLA 时,处理错误的能力更差。您无法检查 VLA 的分配是否成功。
如果可移植性和/或错误处理很重要,则最好使用动态内存分配。
  • malloced array VS. variable-length-array
  • Is it a good idea to use C99 VLA compared to malloc/free?
  • Is it safe to use variable-length arrays?
  • When to use variable length array in C, but when a dynamic allocation?

  • 除此之外,如果您喜欢动态内存,您可以调整大小并释放不再需要的内存,这在 VLA 中是不可能的。

    Is specifying more size than required when declaring an array a bad practice?


    谈到在编译时固定大小的静态分配数组,指定大于所需的大小是 不是 总的来说是一种不好的做法。当然,您可能会浪费一些内存,但是当您需要更多内存或尝试访问超出范围的内存(调用 undefined behavior)时,保持安全总是一个好决定,而不是遇到真正的严重问题。 .
    但是,如果浪费大小的数量很大并且可能大小之间的范围很大,那么您应该真正使用动态内存分配。例如,您不知道是否需要预先设置 10 或 100000 个元素,而为了安全起见,您分配了 100000 个元素。那将是一种不好的做法。
    在这种情况下最好使用动态内存,因为堆栈没有堆内存那么大。
    简短摘要:如果您真的不想浪费任何内存并希望安全,请使用动态内存分配而不是其他任何方式。

    关于arrays - 声明数组时指定的大小是否超出要求是一种不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63085167/

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