windows和linux中程式棧空間

2021-06-17 14:56:47 字數 1273 閱讀 1583

一般來說,我們所用的記憶體有棧和堆之分,其它的我們很少控制,棧的速度快,但是空間小、不靈活;而堆的空間幾乎可以滿足任何要求、靈活,但是相對的速度要慢了很多,並且在vc中堆是人為控制的,new了就要delete,否則很容易產生記憶體洩露等問題。

系統     棧的位元組數

bits   

digits

以兆為單位的值

linux     8192k bytes    <=62407 <=18786                     linux預設8m

(我的好像是10m)

windows   1024k bytes    <=10581 <=3185  (release version)   windows預設1m

一、vc++程式

棧空間的大小

vc++預設的棧空間是1m,有兩個方法更改:

a. link時用/stack指定它的大小,或者在.def中使用stacksize指定它的大小【link選項】

b. 使用控制台命令「editbin」更改exe的棧空間大小。

方法一:stacksize   定義.def檔案

語法:stacksize reserve[,commit]

reserve:棧的大小;commit:可選項,與作業系統有關,在nt上指一次分配物理記憶體的大小

方法二:設定/stack

開啟工程,依次操作選單如下:project->setting->link,在category 中選中output,然後

在reserve中設定堆疊的最大值和commit。

注意:reserve預設值為1mb,最小值為4byte;commit是保留在虛擬記憶體的頁檔案裡面,它設定的較

大會使棧開闢較大的值,可能增加記憶體的開銷和啟動時間。

二、linux下程式

棧空間的大小

linux下非編譯器決定棧大小,而是由作業系統環境決定;而在windows平台下棧的大小是被記錄在可執行檔案中的(由編譯器來設定),即:

windows下可以由編譯器決定棧大小,而在linux下是由系統環境變數來控制棧的大小的。

在linux下通過如下命令可檢視和設定棧的大小:

命令: ulimit -a      # 顯示當前棧的大小 (ulimit為系統命令,非編譯器命令)       

命令: ulimit -s 32768      # 設定當前棧的大小為32m bytes

Linux中程式編譯

arm linux gnueabihf gcc eg arm linux gnueabihf gcc g c led.s o led.o g選項是產生除錯資訊,gdb除錯能夠利用這些資訊進行除錯 c選項是編譯原始檔,但是不產生連線 o是指定編譯產生的檔案名字,即指定編譯後產生led.o檔案arm l...

Linux中程式的執行原理

linux中程式的執行原理 在linux的開發環境中,c語言程式的執行環境如圖1 3所示。作為unix作業系統的一種,linux的作業系統提供了一系列的介面,這些介面被稱為系統呼叫 system call 在unix的理念中,系統呼叫 提供的是機制,而不是策略 c語言的庫函式通過呼叫系統呼叫來實現,...

Linux中程式後台執行命令

1.讓命令後台執行 2.輸出重定向 3.2 1 將標準出錯重定向到標準輸出 4.nohup 退出終端後,程式依然後台執行 5.jobs 檢視後台執行的程序 6.fg 把後台執行的命令 7.ctrl z 暫停某個程序 8.bg 繼續執行後台暫停的程序 9.kill 終止程序 python 列印1 30...