发布网友
共3个回答
热心网友
你可以使用 localtime_r 。
为什么不返回局部指针或者指向堆(也就是NEW出来)的指针?
gmtime, mktime, and localtime all use a single statically allocated tm structure for the conversion. Each call to one of these routines destroys the result of the previous call
因为new出内存会导致程序性能下降。
对于解析时间来说这个new 是没有必要的时间浪费。
时间类型函数需要极端的效率。
假设你有N个时间数据要解析,你有可能只需要时间数据其中的某个字段
newtime_i = localtime(&filetime_i);
if (newtime_i != NULL) {
hour_i = newtime_i->tm_hour;
}
假设此代码要执行几万次。如果new出内存了,是不是损失了很多效率?
如果将堆指针传出,那么就要写一个对应的函数将它释放。
类似于 fopen 和 fclose 。
localtime 这种轻量级的函数都这样干的话,标准库效率会相当低下。
函数库的使用将增加不少必然的内存管理负担。
热心网友
你说的是类似localtime之类的吧,这些函数线程不安全。
如果有两个线程同时调用了这个函数,那返回的指针会指向同一段内存,导致得到的结果是一样的。不管这两个线程传入的参数是否相同。
GNU提供了解决方法,用localtime_r函数取代。但这类函数不是ansi c标准。追问为什么不返回局部指针或者指向堆(也就是NEW出来)的指针
追答当然可以由调用者显式free,但这样比static指针麻烦。总之有利有弊。
这你要问函数的设计者^ ^
热心网友
如果你没有预先给那个静态指针分配足够的存储空间,可能返回值就破坏了系统,只要你编程时坚持对指针先分配空间再使用、用后再删除就不会有问题。追问为什么不返回局部指针或者指向堆(也就是NEW出来)的指针