【发布时间】:2019-04-27 19:19:23
【问题描述】:
如果我打印 FILE 或 FILE 实例的大小,则结果为 216 字节
64 位系统和 32 位系统中的 148 字节(操作系统:Ubuntu 16.04,编译:GCC)
printf("size : %zu",sizeof(FILE));
或
FILE *fp;
printf("size : %zu",sizeof(*fp));
谁能解释为什么它显示这么大,因为我检查了结构成员主要是指针。
【问题讨论】:
-
尽管
FILE的实现内部格式(您不必关心)为什么要使用%d打印size_t表达式?那应该是%zu。如果成员“主要是指针”,请考虑 32 位和 64 位表示中的每个指针从前者到后者的大小实际上将 加倍。 -
它确实发挥了重要作用。使用错误的格式说明符基本上是欺骗
printf,并且如果/当参数不是相应说明符所期望的精确类型时调用未定义的行为。编码世界中有足够的UB;没有理由用琐碎的事情来添加它,尤其是当它们足够简单以首先做正确的事情时。例如:如果size_t和int在您的架构上分别是 64 位和 32 位(大多数 64 位拱门都是这样),那么您会将 64 位值推送到需要 32 位值的函数。 -
我检查了 %zu 并更新了相同的内容,谢谢。
-
顺便说一句,实际上,
FILE占用更多资源:一些缓冲区(千字节)和 file descriptor(操作系统内核已知的资源) -
您期望哪些值以及为什么?
标签: c file data-structures file-handling