【发布时间】:2022-01-07 14:54:13
【问题描述】:
由于数组只是同一类型的连续数据,你不需要显式地将[]放在某个地方(例如你可以int *p1 = malloc(sizeof(int) * 4);,为什么当你realloc(p1, ...)时它知道移动(如果它必须移动)正好 4 个整数的空间,即使内存中可能还有其他整数?
为了澄清这个问题:如果您以这种方式分配一个数组,并且只是一个单独的 int - 这是否意味着这 4+1 个总 int 在内存中从不连续,或者这是内存块中的“它是一个数组”信息(例如,它们有某种分隔符?),还是编译器从malloc 参数推断并记住它?还是别的什么?
基本上,它如何确保它只移动那 4 个,即使有其他相同大小的内存块也可能是连续的?
【问题讨论】:
-
malloc和朋友使用元数据(包括分配的块大小)来扩充分配的数据。你可以对free提出同样的问题。 -
你可以使用
malloc(sizeof(int[4]));