在动态堆上分配的总字节数
Total bytes allocated on dynamic heap
假设 sizeof(int)
。
那么,将在动态堆上分配的总字节大小是多少?
你能解释一下为什么吗?
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 8
#define MAXCOL 27
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
return0;
}
在您的代码中,
int (*p)[MAXCOL];
等价于说,将 p
声明为指向 MAXCOL
个 int
的数组的指针。
所以,考虑到 sizeof(int)
是 4 个字节(32 位编译器/平台),
sizeof(*p)
是 108,MAXROW *sizeof(*p)
是 8 * 108
,如果成功,malloc()
分配那么多字节。
此外,please see this discussion on why not to cast the return value of malloc()
and family in C
.。
假设 "sizeof(int) is "(什么?)...我猜你的意思是 4。
在第一行中,您将 p 声明为指向包含 27 个整数的数组的指针。
在第二行中,您在堆中为取消引用的 p 的大小分配内存 - 这是 27 个整数乘以 8 - 即 27*4*8,因此分配的字节数为 864.
答案应该是MAXROW*MAXCOL*sizeof(int)
。无法根据显示的代码确定 int
的大小。它可以是 2
、4
、8
...甚至 42
,几乎任何大于 0
.
的东西
如果您的老师或课程期望 432
,他们依赖于您未能提供的额外上下文。重读你的问题,你写 assume sizeof(int)。你需要准确地说出应该假设什么。
假设 sizeof(int)
。
那么,将在动态堆上分配的总字节大小是多少?
你能解释一下为什么吗?
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 8
#define MAXCOL 27
int main()
{
int (*p)[MAXCOL];
p = (int (*) [MAXCOL])malloc(MAXROW *sizeof(*p));
return0;
}
在您的代码中,
int (*p)[MAXCOL];
等价于说,将 p
声明为指向 MAXCOL
个 int
的数组的指针。
所以,考虑到 sizeof(int)
是 4 个字节(32 位编译器/平台),
sizeof(*p)
是 108,MAXROW *sizeof(*p)
是 8 * 108
,如果成功,malloc()
分配那么多字节。
此外,please see this discussion on why not to cast the return value of malloc()
and family in C
.。
假设 "sizeof(int) is "(什么?)...我猜你的意思是 4。 在第一行中,您将 p 声明为指向包含 27 个整数的数组的指针。 在第二行中,您在堆中为取消引用的 p 的大小分配内存 - 这是 27 个整数乘以 8 - 即 27*4*8,因此分配的字节数为 864.
答案应该是MAXROW*MAXCOL*sizeof(int)
。无法根据显示的代码确定 int
的大小。它可以是 2
、4
、8
...甚至 42
,几乎任何大于 0
.
如果您的老师或课程期望 432
,他们依赖于您未能提供的额外上下文。重读你的问题,你写 assume sizeof(int)。你需要准确地说出应该假设什么。