⑴ 程序設計中,堆和棧比較重要。棧存取速度大於堆,而且編譯器可以修改棧大小,這個值可以隨意設置嗎
學習電腦編程多年了,在程序設計方面也算有一番見解,希望這些經驗能對題主有所幫助。
現在堆棧通常默認為8M,對吧?事實上,如果你不濫用遞歸,或者alloca / vla,大多數時候,就足夠了。即使它不超過內核限制,通常也不適合驅動大型的,或者它會影響並發進程的數量。並且過程啟動時間也應該稍微減少。當然,如果是專用的伺服器系統,問題就不嚴重了。
⑵ 在linux里,c程序的編輯、編譯、調試的詳細步驟是什麼
(1)用工具寫好C程序...比如vi
(2)打開終端,進入你存放C語言代碼的路徑 例如: cd /opt/
(3)gcc a.c -o abc 意思是:把你的a.c編譯成abc可執行文件
(4)在當前目錄終端下 運行生成的abc,例如: ./abc 前面的.不要掉了
後面可以用gdb進行調試,你可以自己去學習...這是最基本的!!
⑶ 哪個C語言編譯器可以在調試的時候能看到內存信息
用VC6.0就行了,以全英文版為例。
在你要看內存的程序代碼段,點手掌圖標(設斷點的意思),點F5(運行到斷點處),點VIEW->debeg windows->裡面有幾個選項,分別是1、Memory(查看內存,你可以在裡面寫出你要看的地址值,比如0x10000000),2、Registers(查看32位寄存器值),3、Disassembly(反匯編,可以查到寫的C語言,反匯編代碼的純匯編),4、Call Stack(查看堆棧的值,對你寫的函數反向調用)。其它的不一定很有用,在主界面就可以看到。
⑷ c語言堆棧是什麼意思
1、堆棧空間分配
棧(操作系統):由操作系統自動分配釋放 ,存放函數的參數值,局部變數的值等。其操作方式類似於數據結構中的棧。
堆(操作系統): 一般由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式倒是類似於鏈表。
2、堆棧緩存方式
棧使用的是一級緩存, 他們通常都是被調用時處於存儲空間中,調用完畢立即釋放。
堆則是存放在二級緩存中,生命周期由虛擬機的垃圾回收演算法來決定(並不是一旦成為孤兒對象就能被回收)。所以調用這些對象的速度要相對來得低一些。
3、效率比較
棧由系統自動分配,速度較快。但程序員是無法控制的。
堆是由new分配的內存,一般速度比較慢,而且容易產生內存碎片,不過用起來最方便。
4、存儲內容
棧: 在函數調用時,在大多數的C編譯器中,參數是由右往左入棧的,然後是函數中的局部變數。注意靜態變數是不入棧的。
當本次函數調用結束後,局部變數先出棧,然後是參數,最後棧頂指針指向函數的返回地址,也就是主函數中的下一條指令的地址,程序由該點繼續運行。
堆:一般是在堆的頭部用一個位元組存放堆的大小。堆中的具體內容由程序員安排。
(4)c語言編譯器堆棧幀調試擴展閱讀:
簡介
單片機應用中,堆棧是個特殊存儲區,堆棧屬於RAM空間的一部分,堆棧用於函數調用、中斷切換時保存和恢復現場數據。
堆棧中的物體具有一個特性:第一個放入堆棧中的物體總是被最後拿出來, 這個特性通常稱為先進後出 (FILO—First-In/Last-Out)。 堆棧中定義了一些操作, 兩個最重要的是PUSH和POP。 PUSH(入棧)操作:堆棧指針(SP)加1,然後在堆棧的頂部加入一 個元素。
POP(出棧)操作相反,出棧則先將SP所指示的內部ram單元中內容送入直接地址定址的單元中(目的位置),然後再將堆棧指針(SP)減1.。這兩種操作實現了數據項的插入和刪除。
⑸ 堆棧指針是怎麼樣初始化的
在C語言中,堆棧指針的初始化通常由編譯器根據程序的堆棧需求和堆棧的生長方向來確定。堆棧的生長方向通常是從小地址向大地址生長,也就是說,新的棧幀會被壓入到堆棧的較低地址部分。
在程序啟動時,堆棧指針會被初始化到一個固定的值。這個值通常是根據程序的鏈接屬性(如是否使用了動態鏈接)和操作系統提供的內存布局來確定的。在某些情況下,初始化堆棧指針的值可能會在鏈接過程中由鏈接器自動設置。
在C語言編程中,開發者通常不需要直接操作堆棧指針。編譯器會自動處理堆棧的分配和清理。開發者需要關注的是函數調用的堆棧幀大小,以確保足夠的堆棧空間被分配,避免棧溢出錯誤。