C语言 大小需要malloc(或全局赋值)的数组



当我第一次使用C时,我很快注意到int array[big number]会导致程序在函数中调用时崩溃。没有那么快,我发现我可以通过定义具有全局作用域的数组(在函数之外)或使用malloc来防止这种情况的发生。

我的问题是:

从多大的大小开始,有必要使用上面的方法之一来确保我的程序不会崩溃?

我的意思是,它是安全的使用,例如,int i;计数器和int chars[256];小数组,或者我应该只是使用malloc 所有局部变量?

您应该了解在函数中使用int chars[256]与使用malloc()之间的区别。

简而言之,前者将整个数组放在堆栈上。后者分配您从堆中请求的内存。一般来说,堆比堆栈大得多,但两者的大小都可以调整。

另一个关键的区别是,在堆栈上分配的变量将在从方法返回后从技术上消失。(哦,如果您继续访问该数组,您的程序可能会像没有消失一样运行,但是危险潜伏着。)使用malloc分配的大块内存将一直保持分配状态,直到显式释放它或程序退出。

您应该使用malloc进行动态内存分配。对于函数中静态大小的数组(或任何其他对象),如果所需内存太大,您将很快得到分段错误。我不认为可以定义一个"安全限制",它可能是特定于实现的,也有其他因素在起作用,比如当前堆栈和由当前函数的调用者创建的其中的对象。我很想说,只要不涉及递归,任何低于页面大小(通常为4kb)的内容都应该是安全的,但我不认为有这样的保证。

看情况。如果你能保证一行永远不会超过100人……1000个字符,你可以用固定大小的缓冲区。如果你不喜欢,那你就不喜欢。读取x KB的配置文件和x GB的XML文件(没有CR/LF)是有区别的。这取决于.

下一个选择是:你希望你的程序优雅地死亡吗?

相关内容

  • 没有找到相关文章

最新更新