编程论坛
注册
登录
编程论坛
→
C语言论坛
标准库的 char *ctime(const time_t *) 函数,这里参数为什么要传指针呢?
leotol
发布于 2022-03-04 11:22, 988 次点击
这里参数要求传指针(const time_t * ),这是出于什么考虑呢?
由于在函数内部不会修改实参的值,直接传值 time_t(long) 不是更直观吗,为什么作者不这么设计呢?
新手求大佬解惑,
3 回复
#2
八画小子
2022-03-04 20:57
个人觉得,这涉及一个性能问题,或是底层实现的问题。如果传指针,这个很容易做到。time_t这个对库的使用者来说确实是一个类型,但使用者并不知道这个类型是怎么实现的。如果这个类型被实现成一个较为复杂的结构体,是不是有性能问题?
同样的问题还有errno,这东西甚至是实现成对指针的解引用的结果,用的时候一定要想想可不可以按照你的想法使用。
extern
int
*__errno_location (
void
) __THROW __attribute_const__;
# define
errno (*__errno_location ())
这就是GNU实现的errno。
你以为的你以为,不一定就是真的。
[此贴子已经被作者于2022-3-4 20:59编辑过]
#3
leotol
2022-03-06 16:22
回复 2楼 八画小子
哦哦,我大概懂了,感谢回答。
针对这种情况,传指针的确比传值有更大的性能优势,比如在16位设备上,指针变量占用2字节,time_t(long) 变量占用 4 字节。
#4
八画小子
2022-03-06 23:17
以下是引用
leotol
在2022-3-6 16:22:59的发言:
哦哦,我大概懂了,感谢回答。
针对这种情况,传指针的确比传值有更大的性能优势,比如在16位设备上,指针变量占用2字节,time_t(long) 变量占用 4 字节。
不要总想着time_t是4字节,也有可能是更大的。我说的性能问题,不是2字节之差的问题。
传递指针一定通常是保存在寄存器(CPU)中;但直接传递结构体的话,会把这个结构体复制一份到内存中。你觉得哪种更快一些?
函数参数中传递结构体,涉及到内存的复制问题。比如,一个结构体的大小是100字节,你觉得是传递结构体本身好,还是指向结构体的指针更好?
1