我想知道使用calloc
in 分配的缓冲区的大小byte
.通过在我的机器中测试以下内容:
double *buf = (double *) calloc(5, sizeof(double));
printf("%zu \n", sizeof(buf));
Run Code Online (Sandbox Code Playgroud)
结果是8,即使我改为只有一个元素,我仍然得到8.我的问题是:
sizeof
会回归40).char
,int
,double
,或float
)?任何想法都表示赞赏.
引用C11
,章节§6.5.3.4,(强调我的)
的
sizeof
操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.[...]
因此,使用sizeof
您无法获得指针指向的内存位置的大小.你需要自己跟踪.
详细说明,你的情况相当于sizeof (double *)
根据你的环境基本上给你一个指针(加倍)的大小.
没有通用或直接的方法来从内存分配器函数获取分配的内存的大小.但是,您可以使用sentinel值来标记分配的缓冲区的结尾并使用循环,您可以检查值,但这意味着
根据您的需求选择.
归档时间: |
|
查看次数: |
495 次 |
最近记录: |