c:内存分配(发生了什么)

标签 c memory-management

请看一下这段代码。我为第一个变量分配一个字节,为第二个变量分配另一个字节。但是,编译器似乎分配了更多(或者我遗漏了一些东西)。该程序输出两个字符串,即使它们的长度多于一个字节。

void main() {
    char* some1 = malloc(1);
    sprintf(some1,"cool");
    char* some2 = malloc(1);
    sprintf(some2,"face");
    printf("%s ",some1);
    printf("%s\n",some2);
}

拜托,任何人都可以了解分配内存时发生的事情。

最佳答案

您正在调用未定义的行为。此时绝对可能发生任何事情,包括您可能会想到的。

实际发生的是系统确实以更大的 block 为您分配内存。因此,当您超出程序定义的范围时,就系统而言,您还没有超出缓冲区。几乎所有的实现都这样做;系统跟踪 16 字节 block 比逐字节跟踪要容易得多。

关于c:内存分配(发生了什么),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725867/

相关文章:

c++ - 如何在 log(n) 或更短时间内计算此序列的第 n 个元素?

R:了解 object.size() 如何与内存使用相关

performance - 什么是带宽需求?

c - C中的序列化错误

c - Linux:printf 到完整的标准输出

c++ - int64_t 背后的魔力是什么

php - 减少数组和 SplFixedArray 的内存使用

复制 char 指针数组的正确方法?

ios - 委托(delegate)在操作期间释放

c++ - 逐个删除动态数组的元素