malloc分配的指针的大小

malloc分配的指针的大小,c,memory,malloc,C,Memory,Malloc,因为我在malloc中保留了20000字节,所以我希望输出为20000字节。 但是,它返回了8。为什么会发生这种情况?sizeof返回传递给它的类型的大小。 类型是char*,它只指向大小为20000sizeof的内存位置,返回传递给它的类型的大小。 类型是char*,它只指向大小为20000sizeof的内存位置,它是一个编译时运算符。它只知道指针的大小(这里是8字节),而不知道它指向的任何对象的大小sizeof在运行时不存在。sizeof是编译时运算符。它只知道指针的大小(这里是8字节),而

因为我在malloc中保留了20000字节,所以我希望输出为20000字节。
但是,它返回了8。为什么会发生这种情况?

sizeof
返回传递给它的类型的大小。

类型是
char*
,它只指向大小为
20000
sizeof
的内存位置,返回传递给它的类型的大小。

类型是
char*
,它只指向大小为
20000

sizeof
的内存位置,它是一个编译时运算符。它只知道指针的大小(这里是8字节),而不知道它指向的任何对象的大小
sizeof
在运行时不存在。

sizeof
是编译时运算符。它只知道指针的大小(这里是8字节),而不知道它指向的任何对象的大小
sizeof在运行时不存在。

sizeof提供指针变量的大小,而不是它所指向的区域。

sizeof提供指针变量的大小,而不是它所指向的区域。

您必须使用64位系统/操作系统,这就是为什么它为printf打印8(“%d”,sizeof(指针))

当您声明char*p时;它将在内存中保留与(char*)大小相等的空间

现在,如果系统是64位的,它将保留8个字节;如果是32位的,它将保留4个字节

现在


当您定义pointer=malloc(20000)时,它将在内存中保留一个20000字节的块,其中指针指向该块的第一个字节,它不会将20000字节分配给指针。

您必须使用64位系统/OS,这就是为什么它为printf打印8(“%d”,sizeof(pointer))

当您声明char*p时;它将在内存中保留与(char*)大小相等的空间

现在,如果系统是64位的,它将保留8个字节;如果是32位的,它将保留4个字节

现在


当您定义pointer=malloc(20000)时,它将在内存中保留一个20000字节的块,其中指针指向该块的第一个字节,但它不会将20000字节分配给指针。

那么我应该怎么做才能获得分配的内存大小?@ProgrammingNerd如果没有像100000000次这样的问题,那么它就不是了。@ProgrammingNerd:是您分配的,所以您应该通过自己的簿记来跟踪它。至于程序,它自己做内部簿记,以适当地释放
free
调用中分配的内存量。@AlokSave谢谢,我已经得到了它。那么我应该怎么做才能分配内存大小呢?@ProgrammingNerd如果没有像100000000次这样问这个问题,那么它根本就没有。@ProgrammingNerd:是你分配的,所以你应该通过自己的簿记来跟踪它。至于程序,它自己做内部簿记,以适当地释放
free
调用中分配的内存量。@AlokSave谢谢,我知道了。好的,我明白你的意思了。你不必到处去责怪我问了一些可能已经得到回答的问题。是的,我明白你的意思了。你不必到处去责怪我问了一些可能已经得到回答的问题。这是常有的事。
char* pointer;
pointer = malloc (20000);

printf("%d", sizeof(pointer));
//output: 8
char* pointer;
pointer = malloc (20000);