在OS X上由getc和fprintf分配的16 KB

在OS X上由getc和fprintf分配的16 KB,c,macos,memory-management,stdio,C,Macos,Memory Management,Stdio,我的应用程序占用内存,但不会泄漏内存。在分析过程中,我发现大部分分配的内存来自getc和fprintf调用malloc(16kb)。我不知道那些函数在堆上分配内存?尤其是fprintf?如何释放它?在关闭流之前,我忘记调用流上的fflush。。。(原来我的设置不允许刷新流,因为它们仍然被取消的线程阻止…)。谢谢你的帮助 在关闭流之前,我忘了调用流上的fflush。。。(原来我的设置不允许刷新流,因为它们仍然被取消的线程阻止…)。谢谢你的帮助 他们是在每次通话时分配还是只分配一次?在后一种情况下,

我的应用程序占用内存,但不会泄漏内存。在分析过程中,我发现大部分分配的内存来自
getc
fprintf
调用
malloc
(16kb)。我不知道那些函数在堆上分配内存?尤其是
fprintf
?如何释放它?

在关闭流之前,我忘记调用流上的fflush。。。(原来我的设置不允许刷新流,因为它们仍然被取消的线程阻止…)。谢谢你的帮助

在关闭流之前,我忘了调用流上的fflush。。。(原来我的设置不允许刷新流,因为它们仍然被取消的线程阻止…)。谢谢你的帮助

他们是在每次通话时分配还是只分配一次?在后一种情况下,这可能只是他们履行职责的缓冲区;不用担心,16 KB在“普通”PC上算不了什么。它们被调用了很多次,但通过查看valgrind中的调用图,每次调用与getc和fprintf相关的函数时,16 KB被分配到1个块中。。。(16kb*多个调用)=大量内存。如果它是一个缓冲区,我如何释放它?实际上,您的大部分内存来自
getc
fprintf
?有一个不同的操作导致从getc和fprintf进行这些分配。每一个都会导致几个“仍然可以访问”的16kb块。考虑一下这个问题:应用程序运行很长时间,它做了大量的操作。你能解释一下你是如何测量的吗?它们是在每次调用时分配的还是只分配一次?在后一种情况下,这可能只是他们履行职责的缓冲区;不用担心,16 KB在“普通”PC上算不了什么。它们被调用了很多次,但通过查看valgrind中的调用图,每次调用与getc和fprintf相关的函数时,16 KB被分配到1个块中。。。(16kb*多个调用)=大量内存。如果它是一个缓冲区,我如何释放它?实际上,您的大部分内存来自
getc
fprintf
?有一个不同的操作导致从getc和fprintf进行这些分配。每一个都会导致几个“仍然可以访问”的16kb块。考虑一下这个问题:应用程序运行很长时间,它做了大量的操作。你能解释一下你是如何测量这个的吗?