You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:32:02