【发布时间】:2015-12-07 12:14:31
【问题描述】:
我正在尝试编写一些可移植的代码,我一直在思考 Microsoft 如何实现旧的 C 运行时例程,如 gmtime 或 fopen 等返回指针,与今天的 gmtime_s 或 fopen_s 相反,后者需要传递对象并返回一些 errno 状态代码(我猜)。
一种方法是在此类例程中创建静态(优于全局)对象并返回指向它的指针,但如果一个对象当前正在使用此静态指针而另一个对象调用该例程,则第一个对象将获得更改的缓冲区 - 这不好。
此外,我怀疑此类例程是否使用动态内存,因为这会导致内存泄漏。
与其他微软的东西一样,实施没有开放,所以我可以达到顶峰。有什么建议吗?
【问题讨论】:
-
为什么需要静态对象?为什么动态内存会导致内存泄漏?
-
如果我没记错的话,MS C 运行时源代码的大部分是随 Visual Studio 分发的。
-
另外,对于某些库来说,在第一次调用时动态分配内存并在程序的整个生命周期中使用它并不少见。除非它添加一个
atexit处理程序来释放内存,否则从技术上讲它是一个泄漏,但这不是一个持续的泄漏,大多数现代操作系统无论如何都会在终止时释放该内存。