資源描述:
《cc內存分配與內存對齊》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、不明白內存分配和指針的可以看看,其實這本是我們老師留的一個操作系統(tǒng)科技小論文作業(yè),不知道寫什么,干脆把以前收藏的經(jīng)典C內存分配的文章整理并修改了一下。??????此文章有2個用處,1:這是個小論文,格式完整,大家可以復制回去交作業(yè);2:這是整理的經(jīng)典C內存分配小教程(也加了些我自己的觀點),不明白內存分配的可以看看。還有很重要的一個問題:?????這篇文章引用的很多內容我也不知道究竟是出自誰手,知道作者是誰的麻煩告訴下,我好謝謝他。(記得都是csdn里面找的)tag:操作系統(tǒng)論文內存分配內存對齊c語
2、言內存分配免費論文下載.doc正文:關于程序設計的內存分配問題freec(遼寧工程技術大學?軟件學院?計SJ07-3?遼寧?葫蘆島?125000)[摘??要]在大多數(shù)低層程序設計中,由于內存分配與內存對齊問題所帶來的bug所占比重非常大。本文對內存分配中的分配空間類型、作用、方法、適用范圍、優(yōu)缺點以及內存對齊問題中的對齊原因、對齊規(guī)則等進行了詳細的說明,并結合大量c語言代碼進行闡述與分析。[關鍵詞]內存分配;堆棧原理;內存對齊;?1?引言操作系統(tǒng)的內存分配問題與內存對齊問題對于低層程序設計來說是非常
3、重要的,對內存分配的理解直接影響到代碼質量、正確率、效率以及程序員對內存使用情況、溢出、泄露等的判斷力。而內存對齊是常常被忽略的問題,理解內存對齊原理及方法則有助于幫助程序員判斷訪問非法內存。?2?程序的內存分配問題?一、一般C/C++程序占用的內存主要分為5種????1、棧區(qū)(stack):類似于堆棧,由程序自動創(chuàng)建、自動釋放。函數(shù)參數(shù)、局部變量以及返回點等信息都存于其中。????2、堆區(qū)(heap):?使用自由,不需預先確定大小。多數(shù)情況下需要由程序員手動申請、釋放。如不釋放,程序結束后由操作系
4、統(tǒng)垃圾回收機制收回。????3、全局區(qū)/靜態(tài)區(qū)(static):全局變量和靜態(tài)變量的存儲是區(qū)域。程序結束后由系統(tǒng)釋放。????4、文字常量區(qū):常量字符串就是放在這里的。?程序結束后由系統(tǒng)釋放。5、程序代碼區(qū):既可執(zhí)行代碼。?例:#includeintquanju;/*全局變量,全局區(qū)/靜態(tài)區(qū)(static)*/voidfun(intf_jubu);/*程序代碼區(qū)*/intmain(void)/**/{???????intm_jubu;/*棧區(qū)(stack)*/???????stat
5、icintm_jingtai;/*靜態(tài)變量,全局區(qū)/靜態(tài)區(qū)(static)*/???????char*m_zifum,*m_zifuc="hello";/*指針本身位于棧。指向字符串"hello",位于文字常量區(qū)*/???????void(*pfun)(int);/*棧區(qū)(stack)*/???????pfun=&fun;???????m_zifum=(char*)malloc(sizeof(char)*10);/*指針內容指向分配空間,位于堆區(qū)(heap)*/???????pfun(1);????
6、???printf("&quanju???:%x/n",&quanju);???????printf("&m_jubu???:%x/n",&m_jubu);???????printf("&m_jingtai:%x/n",&m_jingtai);???????printf("m_zifuc???:%x/n",m_zifuc);???????printf("&m_zifuc??:%x/n",&m_zifuc);???????printf("m_zifum???:%x/n",m_zifum);??????
7、?printf("&m_zifum??:%x/n",&m_zifum);???????printf("pfun??????:%x/n",pfun);???????printf("&pfun?????:%x/n",&pfun);???????getch();???????return0;}voidfun(intf_jubu){???????staticintf_jingtai;???????printf("&f_jingtai:%x/n",&f_jingtai);???????printf("&f_j
8、ubu???:%x/n",&f_jubu);/*棧區(qū)(stack),但是與主函數(shù)中m_jubu位于不同的棧*/}?輸出結果:&f_jingtai:404020&f_jubu???:22ff40&quanju???:404070&m_jubu???:22ff74&m_jingtai:404010m_zifuc???:403000&m_zifuc??:22ff6cm_zifum???:3d24e0&m_zifum??:22ff70pfun??????:4013af&pfu