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