空间复杂性

-4 c

如何在运行时获取指针占用的空间

Chr*_*uin 5

想象一种类型,我将其称为"类型".可能是一个"int",可能是一个奇特的结构.

type *p;
Run Code Online (Sandbox Code Playgroud)

sizeof(p)=指向p的指针的大小(即,存储'p'中的数据所存储的地址所需的字节数.在PC上,它可能是4或8字节,具体取决于你是否有32位或64位架构,但不保证.在其他archetectures它几乎可以是任何东西)

sizeof(*p)= p类型的大小; 用于在"类型"中存储数据的字节数.

重要的提示:

您可能会看到执行此操作的代码:

   p = malloc(sizeof(*p)+100)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,将分配足够的内存来存储"类型"和额外的100个字节.但是,执行'sizeof(*p)'将返回'type'所需的内存,而不是额外的100字节.C中无法知道已分配了多少内存; 你必须自己管理.

  • 指针大小可以变化很大.我使用的嵌入式编译器有16位和24位指针.24位指针为地址分配16位,为指定存储器类型分配8位(它与哈佛架构芯片一起使用,如8051具有许多不同的存储器类型).如果指定指针指向特定的内存空间,则可以删除8位指定符,并且您有一个16位指针.因此,即使给定特定的体系结构和编译器,指针也可能具有不同的大小. (2认同)