【问题标题】:How does C's realloc differentiate between an array of ints and a single int?C 的 realloc 如何区分 int 数组和单个 int?
【发布时间】:2022-01-07 14:54:13
【问题描述】:

由于数组只是同一类型的连续数据,你不需要显式地将[]放在某个地方(例如你可以int *p1 = malloc(sizeof(int) * 4);,为什么当你realloc(p1, ...)时它知道移动(如果它必须移动)正好 4 个整数的空间,即使内存中可能还有其他整数?

为了澄清这个问题:如果您以这种方式分配一个数组,并且只是一个单独的 int - 这是否意味着这 4+1 个总 int 在内存中从不连续,或者这是内存块中的“它是一个数组”信息(例如,它们有某种分隔符?),还是编译器从malloc 参数推断并记住它?还是别的什么?

基本上,它如何确保它只移动那 4 个,即使有其他相同大小的内存块也可能是连续的?

【问题讨论】:

标签: c malloc realloc


【解决方案1】:

realloc 仅在传递指向由malloc 系列例程的成员(或空指针)分配的内存时才定义。这些例程记录它们分配的内存。当您调用realloc 时,它会使用这些记录来知道分配的块有多长。

通常,内存块的主记录被放入该块之前的字节中,因此realloc 所要做的就是获取您给它的指针,从中减去已知数量的字节,然后查看在该新地址的数据中,它将找到有关已分配块大小的信息。但是,其他方法也是可能的。

【讨论】:

  • ... 这不仅适用于realloc,还适用于free
猜你喜欢
  • 2022-01-15
  • 2022-11-22
  • 1970-01-01
  • 2021-11-25
  • 2010-10-02
相关资源
最近更新 更多