gpt4 book ai didi

c - Malloc 函数在运行时返回的最大大小是多少?

转载 作者:行者123 更新时间:2023-11-30 14:39:08 25 4
gpt4 key购买 nike

问题 1:MALLOC 可以分配的最大内存是多少?问题 2:Malloc 是否分配用户请求的所有内存,还是仅分配大量内存。

我尝试查找动态分配的内存大小,但未能成功。许多人在 stackoverflow 上写道,你找不到动态内存的大小。这是真的吗?

我尝试过这些步骤,但对于动态内存分配来说不正确。

int *var=malloc((sizeof(int)*10000));
printf("Size of Alloacted Memory=%ld ", (char *)(var+1) - (char *)var);

没有错误,但输出不正确。

最佳答案

我对你到底问的问题有点困惑,所以我尽力回答。

  1. 如果您使用给定的所需大小调用malloc(),它将尝试分配该大小。如果成功,它返回分配的内存块的地址,如果失败,它返回NULL

    请注意,这仅指虚拟内存。在某些系统上,仅在实际寻址内存时才提供物理内存,如果随后发现请求无法满足,则程序将被终止。

  2. 分配 block 的大小是您所要求的。实际上,对于簿记和填充来说,这可能要多一些,但这与您(调用者)无关 - 对您允许访问之外的内存的任何访问都是未定义的行为,并且可能会导致故障。

  3. (我不太明白 DMA 的用处。)

关于“分段”分配的补充:

如果您调用 malloc() 来分配大内存块,C 库将分配其虚拟内存的该区域。如果尚未使用,则必须以一种或其他方式向操作系统请求。

在 Linux 下,只要有足够的虚拟内存(=地址空间)并且满足某些其他限制,该请求就会被授予。只有当您写入分配的内存区域时,它们实际上是从 RAM 的空闲部分分配的。但对于实际使用来说,这是无关紧要的,因为程序的行为“就像”分配立即发生一样(除非没有假设的那么多可用内存)。

关于c - Malloc 函数在运行时返回的最大大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235490/

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