c - 定义linux中C程序允许的最大char[]数组大小

标签 c arrays memory memory-management size

我用 C 语言编写了涉及本地字符数组的代码,但我读到,如果数组的大小太大,则可能会发生段错误。

在我的代码中,我包含了以下行:

#include <stdint.h>

我还在输出部分添加了:

printf("%d",SIZE_MAX);

执行后,我看到 -1,这表明我无限制。

然后我进入控制台并检查我的限制:

bash-3.1# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
pending signals                 (-i) 8189
max locked memory       (kbytes, -l) 4096
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
stack size              (kbytes, -s) 4096
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8189
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

我看到很多“无限”的。

我是否正在寻找正确的位置来定义 char[] 数组的最大允许大小?如果是这样,我需要修改哪个值?

最佳答案

您需要修改堆栈大小。 -s 是使用 ulimit 设置堆栈大小的选项。

当前在您的系统上它是 4 MB。

stack size              (kbytes, -s) 4096

例如:

ulimit -s unlimited 
//sets stack size to ulimited

关于c - 定义linux中C程序允许的最大char[]数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56154533/

相关文章:

c - long 是 C 中的数据类型还是限定符?

c - 编译时出错 : expected expression before ')' token

c++ - C++中如何匹配两个数组的内容

java - 基于 Shrinking Sliding Window/2D array 拆分字符串

r - data.table fread 无法为具有 200Gb RAM 的 300Mb 文件分配内存

c - 这个 C 代码是什么意思 (G_GNUC_PRINTF)?

c++ - Active Accessibility (COM) 调用返回不同,具体取决于调用者是线程还是进程。什么?

通过将数字替换为数字,将句子转换为数字。例如使用 strcmp 将 ABCD 转换为 2223

python - 我如何释放由 "for"引起的内存

c - 合并排序算法中的运行时错误