为何用malloc分配1字节的char*,sizeof返回值为8?(g++环境)
为什么sizeof(char*)返回8而非1?
你混淆了指针变量本身的大小和指针指向的内存块大小:
malloc(1)确实在堆上分配了1字节的内存,但charP是一个指针变量,它的本质是用来存储这块内存的起始地址。sizeof(charP)计算的是指针变量自身的字节数,在64位操作系统中,内存地址是64位的,所以指针变量的大小固定为8字节,这就是输出8的原因。- 如果你想获取
malloc分配的内存块实际大小,C标准并没有提供标准方法,但部分编译器(如GCC)提供了非标准的malloc_usable_size函数可以使用,示例代码:
注意这个函数是非标准的,跨平台使用可能存在兼容性问题。printf("size of allocated memory: %zu\n", malloc_usable_size(charP)); - 补充:
sizeof(char)永远是1,这是C语言标准规定的,但这和指针变量的大小是完全不同的两个概念。
内容的提问来源于stack exchange,提问作者binary_assemble
相关产品推荐
相关产品推荐

