linuxc內存
那是因為你接受到的數據大於分配的內存了,可以設置一個計數器記錄接受到的數據的總的大小,如果大於緩沖區的大小,就存到開始的地方。
❷ linux c 內存泄露怎麼測試
是不是說沒有一種內存檢查工具能夠在linux使用呢,也不是,像valgrind工具還是相當不錯的。他的下載地址是 下載一個valgrind 3.2.3 (tar.bz2) 工具,按照裡面的README提示,安裝後就可以使用這個工具來檢測內存泄露和內存越界等。這是一個沒有界...
❸ linux c 內存泄漏問題
具體來說,myfree中的num變數在內存中緊鄰著p變數,如果你將num申明為int,那他只佔四個位元組,而你初始化num的時候 memcpy(&num, p, sizeof(size_t)); 卻會將8個位元組拷進去,這會修改緊鄰這num的變數p,直接導致p被清零(如果malloc free外加修改的話,清的不一定是0),而free函數在傳入空指針是不做處理的。我把代碼修改了一下,你可以看一下下面程序的輸出,對應myfree的free那一行,實際被free的是空指針。
#include<stdio.h>
#include<malloc.h>
#include<pthread.h>
#include<unistd.h>
intfCnt=0,mCnt=0;
pthread_mutex_tmutex;
void*mynew(size_tsz){
void*p=malloc(sizeof(size_t)+sz);
memcpy(p,&sz,sizeof(size_t));
pthread_mutex_lock(&mutex);
mCnt+=sz+sizeof(size_t);
printf("mallocsz[%d],mCnt[%d],fCnt[%d] ",sz+sizeof(size_t),mCnt,
fCnt);
pthread_mutex_unlock(&mutex);
returnp+sizeof(size_t);
}
voidmyfree(void*prt){
void*p=prt-sizeof(size_t);
if(p==NULL){
printf("pbufisNULL ");
return;
}
intnum=0;//error!
//size_tnum=0;
printf("%p,%p ",&p,&num);
memcpy(&num,p,sizeof(size_t));
pthread_mutex_lock(&mutex);
fCnt+=num+sizeof(size_t);
printf("freesz[%d],fCnt[%d],mCnt[%d] ",num,fCnt,mCnt);
pthread_mutex_unlock(&mutex);
printf("trytofree%p ",p);
free(p);
}
intmain(){
void*p=mynew(100);
printf("pis%p ",p);
myfree(p);
usleep(1000000);
return0;
}
❹ 怎麼減少 linux c程序內存佔用
1. 在linux下,查看一個運行中的程序, 佔用了多少內存, 一般的命令有
(1). ps aux:
其中 VSZ(或VSS)列 表示,程序佔用了多少虛擬內存。
RSS列 表示, 程序佔用了多少物理內存。
虛擬內存可以不用考慮,它並不佔用實際物理內存。
(2). top 命令也可以
其中 VIRT(或VSS)列 表示,程序佔用了多少虛擬內存。 同 ps aux 中的 VSZ列
RES列 表示, 程序佔用了多少物理內存。同 ps aux 中的RSS列
2.在linux下, 查看當前系統佔用了多少內存, 一般的命令是 free
其中, free就是系統還有多少內存可以使用。
但由於 linux 系統對內存使用有一個原則, 就是, 內存是寶貴的, 能使用多少就使用多少。 所以, linux會把已經調用過的包緩存起來,放在內存里。
這樣,實際上,可以使用的內存,就可以理解為, free+buffers+cached
❺ linux C內存分配
少年不要裝逼了老老實實的用windows系統吧
❻ linux下c語言大內存分配問題
數組太大,超出 0x10000000 或 (268435456)
可以這樣:
char *x;
main()
{
x=(char *) malloc(268435456);
if(!x) printf("failed");
else printf("success");
}
❼ linux系統下的C語言中的虛擬內存分配問題
因為內存管理由glibc管理,當它認為需要釋放時,才釋放前提是,你已經讓它釋放了,說的簡單就是,你讓它釋放,它要過一段時間等合適了,再釋放
❽ 在Linux中運行的C程序出現內存泄漏現象,怎麼解決
內存泄漏指由於疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
可以使用相應的軟體測試工具對軟體進行檢測。
1. ccmalloc-Linux和Solaris下對C和C++程序的簡單的使用內存泄漏和malloc調試庫。
2. Dmalloc-Debug Malloc Library.
3. Electric
Fence-Linux分發版中由Bruce Perens編寫的malloc()調試庫。
4. Leaky-Linux下檢測內存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內存泄漏。
6. MEMWATCH-由Johan
Lindh編寫,是一個開放源代碼C語言內存錯誤檢測工具,主要是通過gcc的precessor來進行。
7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling data
generated by Cachegrind and Calltree.
9. Leak
Monitor-一個Firefox擴展,能找出跟Firefox相關的泄漏類型。
10. IE Leak Detector
(Drip/IE Sieve)-Drip和IE Sieve leak
detectors幫助網頁開發員提升動態網頁性能通過報告可避免的因為IE局限的內存泄漏。
11. Windows Leaks
Detector-探測任何Win32應用程序中的任何資源泄漏(內存,句柄等),基於Win API調用鉤子。
12. SAP Memory
Analyzer-是一款開源的JAVA內存分析軟體,可用於輔助查找JAVA程序的內存泄漏,能容易找到大塊內存並驗證誰在一直佔用它,它是基於Eclipse
RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件。
13. DTrace-即動態跟蹤Dynamic
Tracing,是一款開源軟體,能在Unix類似平台運行,用戶能夠動態檢測操作系統內核和用戶進程,以更精確地掌握系統的資源使用狀況,提高系統性能,減少支持成本,並進行有效的調節。
14. IBM Rational PurifyPlus-幫助開發人員查明C/C++、託管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus
將內存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。
15. Parasoft Insure++-針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監測C/C++程序,發現其中存在著的內存破壞、內存泄漏、指針錯誤和I/O等錯誤。並通過使用一系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的准確位置並給出詳細的診斷信息。能作為Microsoft
Visual C++的一個插件運行。
16. Compuware DevPartner for Visual C++ BoundsChecker
Suite-為C++開發者設計的運行錯誤檢測和調試工具軟體。作為Microsoft Visual Studio和C++ 6.0的一個插件運行。
17. Electric Software GlowCode-包括內存泄漏檢查,code
profiler,函數調用跟蹤等功能。給C++和.Net開發者提供完整的錯誤診斷,和運行時性能分析工具包。
18. Compuware DevPartner Java
Edition-包含Java內存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。
19. Quest JProbe-分析Java的內存泄漏。
20. ej-technologies JProfiler-一個全功能的Java剖析工具,專用於分析J2SE和J2EE應用程序。它把CPU、執行緒和內存的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用伺服器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內存泄漏、並解決執行緒的問題。4.3.2注冊碼:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用來診斷Java內存泄漏並指出根本原因,專門針對Intel平台並得到優化,能在Intel硬體上獲得最高的性能。
22. SciTech Software AB .NET Memory
Profiler-找到內存泄漏並優化內存使用針對C#,VB.Net,或其它.Net程序。
23. YourKit .NET & Java Profiler-業界領先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的獲獎產品performance profiling和memory
debugging工具集的下一代替換產品,支持Microsoft, Borland, Intel, Compaq 和
GNU編譯器。可以為.NET和Windows程序生成全面細致的報告,從而幫助您輕松隔離並排除代碼中含有的性能問題和內存/資源泄露問題。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位應用程序。
25. JavaScript Memory Leak Detector-微軟全球產品開發歐洲團隊(Global Proct
Development- Europe team, GPDE)
發布的一款調試工具,用來探測JavaScript代碼中的內存泄漏,運行為IE系列的一個插件。
❾ linux的C語言開線程後如何歸還使用的內存
線程自身用的內存,是在棧上系統自動分配,或自己配置(操作系統提供了可編程配置參數,但也是操作系統在管理)。線程運行完成後返回棧內存操作系統會自動回收。需要注意的是,如果是在線程運行中中,使用malloc或操作系統的內存分配函數分配的內存,需要在線程返回前或返回後顯示釋放。自己編寫代碼,顯示調用free或操作系統提供的內存釋放函數。
❿ linux c 內存泄露問題
沒有調用malloc函數,也就無需使用free函數。