关于sizeof获取malloc分配指针大小不符合预期的问题咨询
sizeof获取malloc分配指针大小不符合预期的问题咨询
嘿,我来帮你理清这个困惑~
首先先还原下你的代码和运行结果:
你的代码片段
printf("m=%d,M=%d,float_size=%d\n", m, M, floatsize); a = (float*)malloc(floatsize * m * M); f = (float*)malloc(floatsize * M); printf("bytes of a is %d, bytes of f is %d\n", sizeof(a), sizeof(f));
运行结果
m=1,M=3,float_size=4
bytes of a is 8, bytes of f is 8
你疑惑为什么不是3*4=12,核心问题在于你搞混了指针变量本身的大小和指针指向的内存块的大小!
a和f本质都是float*类型的指针变量,在64位系统中,指针的大小固定是8字节——因为它的作用是存储内存地址,64位系统的地址长度就是8字节,不管你用malloc给它分配了12字节还是1000字节的内存,指针自身占用的空间都是由系统架构决定的,和指向的内存块大小完全无关。- 如果你想知道
malloc实际分配的内存块有多大,C标准里并没有提供通用的方法,但部分平台有非标准的工具函数(比如Windows下的_msize、macOS/iOS下的malloc_size)。不过其实你自己计算的floatsize * m * M就是你向malloc请求的内存大小,只要malloc返回非NULL,就说明它成功分配了至少这么大的空间。
简单来说:你打印的sizeof(a)是指针自己的大小,不是它指向的那块内存的大小,这就是结果和你预期不符的原因啦~
备注:内容来源于stack exchange,提问作者user19470144
相关产品推荐
相关产品推荐

