Dav*_*vid 0 c malloc memory-management
假设在x86_64系统上运行以下程序:
int main() {
//sizeof(int) == 4
//sizeof(int*) == 8
//sizeof(long) == 8
// I would like 2 distinct memory locations to hold these two integers
int* mem1 = (int*)malloc(2 * sizeof(int));
mem1[0] = 1;
mem1[1] = 2;
//I would like 1 distinct memory location to hold this one long
long* mem2 = (long*)malloc(1 * sizeof(long));
mem2[0] = 3;
free(mem1);
free(mem2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
由于malloc接收要分配的字节数,因此对malloc的两次调用看起来完全相同.malloc如何知道实际分配16个字节来存储两个整数数组并且只为一个长度分配8个字节?
为清晰起见进行编辑:基于以下假设,存储这两个不同的阵列将需要为每个阵列提供不同的空间量.但是,malloc似乎每次在此程序中保留相同的空间量.然而,对于长度不同于longs 的数据类型的数组,正确地确定了数组大小.
有人可以帮我识别内存的这种理解中的缺陷,还是指出malloc/libc在后台做的事情?以下是我正在进行的假设
mem[idx]指MEM的地址加上IDX的偏移量,并在存储器中该地址不能指向数据中的另一个项目的中间(因此mem1[0]不能参考的下半字mem1和mem1[1]不能然后参考高位字)小智 7
malloc如何区分占用相同空间的不同类型?
它没有.
由于malloc接收要分配的字节数,因此对malloc的两次调用看起来完全相同.malloc如何知道实际分配16个字节来存储两个整数数组,并且只为一个长度分配8个字节
它只能使用您传递它的大小作为其参数.但是,您的示例和/或理解存在缺陷 - 使用指定的sizeof值,两个调用都将分配8个字节.(即,2 * sizeof(int)其是2 * 4和sizeof(long),这是1 * 8).