【发布时间】:2017-03-25 17:13:39
【问题描述】:
假设我们有一个大小为 40 的 char 数组,
char buffer[40];
其次,假设这个数组已经满了,有人写了 40 个字符。
因此,我们可以说这个数组的元素占用 40 个字节,因为每个 char 是 1 个字节。
我的问题是: 我们的数组实际上在内存中占用了多少空间?它会占用 40 字节的空间,还是更多?是否需要额外的位来将此数组标识为 char 类型,是否需要额外的位来允许空终止?如果是这样,可能是我们需要大约 42 个字节来将这个数组存储在内存中。
因此,我想知道我是否可以在分配了 40 个字节的内存空间中可靠地容纳 40 个字符的数组。
【问题讨论】:
-
你尝试了什么?调试器将很容易地显示这一点。或者打印数组的大小。你的代码在哪里?你的 C 书怎么说?为什么像 C 这样的完全静态类型的语言必须在运行时跟踪类型?
-
一般所有的类型检查和如何访问不同类型的细节都是在编译时制定的,运行时不需要与变量一起存储额外的数据。
-
您可以可靠地将 40 字节放入 40 字节数组中。你不能做的是将一个 40 个字符的以 nul 结尾的字符串放入一个 40 字节的数组中。它必须是 39 个字符加上
'\0'终止符。 -
谢谢大家,我真的很感激,发现你们所有的 cmets 都有帮助。我只是在一般地问这个问题,因为我正在计划一个影子文件系统并希望避免段错误(这里是内存新手)。
-
明白了大卫,谢谢你的提示 :)
标签: c arrays memory-management