【发布时间】:2021-06-22 10:22:47
【问题描述】:
我目前正在编写一个需要 100MB 缓冲区大小来发送数据的套接字程序。此缓冲区大小将始终为固定大小并持续整个程序的持续时间。
与仅仅声明一个全局数组相比,使用 malloc() 有什么好处吗?
注意:我能想到的唯一好处是 malloc() 会告诉你内存分配是否失败,而不是全局数组,当你请求太多内存时可能会导致未定义的行为。
【问题讨论】:
-
据我所知,全局数组不会有未定义的行为。该程序将无法启动。或者,如果在启用内存过量使用的 Linux 中运行,它可能会因 OOM 意外而被终止。但这也不是未定义的。
-
如果静态数组太大,编译器告诉我,就没有可执行文件了。
-
它是依赖于实现的,但我认为任何好的实现都不会让你用太大的静态缓冲区进行编译。
-
取决于“太大”的含义;您当然可以使用适合架构提供的地址空间的数组来编译程序,但由于实际上没有那么多内存,因此无法在您的系统上运行。
-
我会选择动态分配,因为它可以保证程序的编译,并且只会在有特定限制的系统上失败,但在其他系统上也可以。
标签: c memory-management static malloc heap-memory