gpt4 book ai didi

c - 为什么 malloc(1) 用于存储 4 字节整数?

转载 作者:太空宇宙 更新时间:2023-11-04 00:23:52 24 4
gpt4 key购买 nike

据我了解,malloc(x) 返回一 block x 字节长的内存。

所以要存储一个 4 字节整数,我会这样做:

int *p = (int *)malloc(4);
*p = 100;

因为 sizeof(int) 为我返回 4。

但是,如果我这样做:

int *p = (int *)malloc(1);
*p = 100;

它的工作方式似乎完全一样,存储值没有问题。

为什么使用 malloc() 请求的内存量似乎无关紧要?一个 4 字节的整数不应该需要 malloc(4) 吗?

最佳答案

如果这在您的情况下有效,它只是偶然有效并且不能保证有效。这是未定义的行为(比较 this SO question ),一切皆有可能。

您期望发生什么?你的程序崩溃了?

如果您更频繁地调用 mallocfree,这种情况仍可能发生。 malloc 通常会比请求多占用一些字节,并将额外的空间用于管理(所有内存块的链表、内存块的大小)。如果您在分配的 block 之前或之后写入一些字节,那么您很可能会弄乱内部管理结构,并且 free 的后续 malloc 将崩溃。

如果 malloc 在内部总是分配最少 n 个字节,那么您的程序可能只会在您访问字节 n+1 时崩溃。此外,操作系统通常只基于页面来保护内存。如果一个页面的大小为 512 字节,并且您的 malloc-ed 字节位于页面的中间,那么您的进程可能能够读写该页面的其余部分,并且只会在访问下一个内存页面时崩溃。但请记住:即使这有效,它也是未定义的行为。

关于c - 为什么 malloc(1) 用于存储 4 字节整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41822904/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com