講C語言內存管理的書籍或者博客?
自學C語言,能寫出簡單的數據結構了。但是不明白C中不同變數(作用域,靜態等),常量,函數調用,堆,棧等在內存中的表示。可否指點一二?
「在內存中的表示」么。不失通用性但又有足夠細節的話,請讀CSAPP:Computer Systems: A Programmer"s Perspective
其中,Chapter 3: Machine-Level Representation of Programs的一章:
我來稍稍歪點樓,推薦的不是書或博客,而是斯坦福的一門公開課 -- 《編程範式》。斯坦福大學公開課:編程範式
該課程主講C和C++高級內存管理特色;命令式和面向對象2種範式的差異。函數範式(LISP)和並行編程(C和C++) Python C#等新語言概論。基礎要求:具備編程能力,能在抽象化層次上解決問題。學術應該有一定的C++基礎。熟悉矩陣、指針、引用、類、演算法、遞歸、鏈表、HASH演算法、迭代等。
這門公開課前13集就是在講題主所說的「不同變數(作用域,靜態等),常量,函數調用,堆,棧等在內存中的表示」,包括C,也包括C++。而且網易上有中文字幕,理解起來不會太吃力。
比如第三節的介紹是這樣的:後面講關於多線程同步,還有Scheme、Python等一些其他編程語言。我當時只看到了多線程同步的部分,個人感覺從中得益頗大的。本講在基本數據類型的內存布局的基礎上,講授了結構體的內存布局,以及數組的內存布局,以及它們的混合實現。揭示了C語言中的複雜數據結構的機器特性,以及C語言中無邊界檢查的利弊。最後通過引入swap函數引出了在C語言中寫出通用的,「泛型的」代碼的必要。
- Memory Management: Algorithms and Implementation in C/C++
- Memory as a Programming Concept in C and C++
講C語言內存管理的書籍或者博客?
自學C語言,能寫出簡單的數據結構了。但是不明白C中不同變數(作用域,靜態等),常量,函數調用,堆,棧等在內存中的表示。可否指點一二?
個人經歷,是從以下幾個層面去了解的:
1 編譯原理:這部分應該了解幾個過程以及它們做了什麼,大致理解生成的IR以及代碼生成,不用太深(深入下去估計你沒時間搞後面的了 書籍的話:除了龍書/虎書/鯨書,可以找點簡單的2 鏈接/裝載/CRT:這部分應該是核心
書籍:《CSAPP》《程序員的自我修養》《Linkers and Loaders》等 資料:glibc文檔與源碼。 (從CRT可以了解C層面的內存管理malloc/free (注意ELF文檔格式,理解各個section和segment對理解ELF文件的數據代碼等分布很有幫助3 操作系統:這部分著重了解mm和process部分,尤其注意進程的虛擬地址空間分布,和2中的裝載結合理解。 資料:linux kernel (2中的ELF executable file各個segment怎麼映射到進程的虛擬地址空間的...(還有其他體系結構等等就不說了,(最後感覺這個坑對提高素養還是挺有用的,不過對工程能力沒有太大的作用...程序員的自我修養
看richard jones的書
建議程序員的自我修養,講的很不錯
看雪有本C++逆向的書籍,封面是黃顏色的,對你應該有幫助。
趙炯的《Linux內核完全注釋》第三章中,某個小節「C函數調用機制」。寫的很清晰,有C及彙編代碼的解釋。
《深入理解C指針》
C專家編程C與指針
推薦閱讀:
※筆記本內存佔用突然變高,本來29%左右,現在開機就58%,沒開任何程序啊,急求,感謝?
※asp.net 應用佔用內存過大如何排查?
※Python可以視作同時支持像C++一樣的RAII特性,也具有垃圾回收GC的編程語言嗎?
※非同步操作時的內存管理?
※是否有可能發現一段內存被野指針修改了?