大佬教程收集整理的这篇文章主要介绍了简单的C实现跟踪内存malloc / free?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要跟踪我的项目中简单的melloc /免费电话.我只需要了解当程序分配了所有资源时需要多少堆内存的基本思想.因此,我为malloc / free调用提供了一个包装器.在这些包装器中,当需要@L_659_0@malloc时,我需要增加一个当前的内存计数,并在调用free时递减它. malloc的情况是直接的,因为我有从调用者分配的大小.我想知道如何处理自由案例,因为我需要在某处存储指针/大小映射.这是C,我没有一个标准的地图很容易实现.
所以我想知道是否有一个简单的实现可能会导致我.如果没有,这是推动实施的动力.
编辑:纯粹用于调试,此代码不随产品一起提供.
编辑:根据Makis的回答初步实施.我会很欣赏这方面的反馈意见.
编辑:重新实现
#include <stdlib.h> #include <st@L_674_13@.h> #include <assert.h> #include <String.h> #include <limits.h> static size_t gnCurrentMemory = 0; static size_t gnPeakMemory = 0; void *R_354_11845@emAlloc (size_t nSizE) { void *pMem = malloc(sizeof(size_t) + nSizE); if (pMem) { size_t *pSize = (size_t *)pMem; memcpy(pSize,&nSize,sizeof(nSizE)); gnCurrentMemory += nSize; if (gnCurrentMemory > gnPeakMemory) { gnPeakMemory = gnCurrentMemory; } printf("PMemAlloc (%#X) - Size (%d),Current (%d),Peak (%d)\n",pSize + 1,nSize,gnCurrentMemory,gnPeakMemory); return(pSize + 1); } return NULL; } void MemFree (void *pMem) { if(pMem) { size_t *pSize = (size_t *)pMem; // Get the size --pSize; assert(gnCurrentMemory >= *pSizE); printf("PMemFree (%#X) - Size (%d),pMem,*pSize,gnPeakMemory); gnCurrentMemory -= *pSize; free(pSizE); } } #define BUFFERSIZE (1024*1024) typedef struct { bool flag; int buffer[BUFFERSIZE]; bool bools[BUFFERSIZE]; } sample_buffer; typedef struct { unsigned int whichbuffer; char ch; } buffer_info; int main(void) { unsigned int i; buffer_info *bufferinfo; sample_buffer *mybuffer; char *pCh; printf("Tesint MemAlloc - MemFree\n"); mybuffer = (sample_buffer *) MemAlloc(sizeof(sample_buffer)); if (mybuffer == NULL) { printf("ERROR ALlocatiNG mybuffer\n"); return EXIT_FAILURE; } bufferinfo = (buffer_info *) MemAlloc(sizeof(buffer_info)); if (bufferinfo == NULL) { printf("ERROR ALlocatiNG bufferinfo\n"); MemFree(mybuffer); return EXIT_FAILURE; } pCh = (char *)MemAlloc(sizeof(char)); printf("finished malloc\n"); // fill allocated memory with Integers and read BACk some values for(i = 0; i < BUFFERSIZE; ++i) { mybuffer->buffer[i] = i; mybuffer->bools[i] = true; bufferinfo->whichbuffer = (unsigned int)(i/100); } MemFree(bufferinfo); MemFree(mybuffer); if(pCh) { MemFree(pCh); } return EXIT_succesS; }
这可以,btw也可以轻松地用于栅栏指针/指纹等.
以上是大佬教程为你收集整理的简单的C实现跟踪内存malloc / free?全部内容,希望文章能够帮你解决简单的C实现跟踪内存malloc / free?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。