變數儲存與長度

2022-05-02 17:45:05 字數 1196 閱讀 2095

研究實驗三

在學習組合語言的時候,提供了很多種定址方式,便於我們找到記憶體單元位址,我們關注資料,無非關注資料的兩個量:資料存放的位置;資料有多大。那麼,在c語言中,我們如何使用記憶體儲存資料,使得我們能夠達到和彙編一樣的水平:即我們清楚的知道我們的資料在哪,我們知道我們的資料與多大?

下面通過實驗一研究,c語言中資料如何放置到記憶體中,通過其彙編**使我們更清晰的去認識這一點:

圖1  uml.c程式對應的彙編**

通過單步執行程式,發現和組合語言中國結論一樣,段位址預設還是ds

通過修改ip使其指到1fa,開始用t命令單步執行程式,然後通過d命令檢視相應記憶體內容,發現c語言對使用記憶體儲存資料達到了和組合語言一樣的目的!

用c語言在螢幕上顯示字元:

圖2  c語言螢幕顯示

可以發現,再次印證,c語言能夠達到和彙編同樣的目的,同樣能夠隨心所欲的操控記憶體。

圖3 全域性變數和區域性變數

從對應的組合語言可以看出的,全域性變數存在乙個固定的記憶體裡,而區域性變數存放在堆疊中。而push bp,mov bp,sp的作用就是為了用於存放區域性變數的而設定的。

圖4  返回值

通過彙編**可以看出程式返回值存放在ax中。

圖5  安全空間

總結體會:

本次研究實驗,最重要的是學到了兩點:c語言也可以和組合語言一樣,能夠達到隨心所欲操控記憶體的目的,不管對於何種語言,我們對所關心資料的引數,無非是資料在哪,資料有多大。以及,全域性變數存放在乙個固定的記憶體單元中,區域性變數存放在堆疊中。

MySQL 記錄長度與字元儲存

mysql中規定 任何一條記錄最多不能超過65535個位元組,即varchar永遠不可能達到其理論值 即使編碼改為latin1,那麼最多儲存65533個字元,餘出兩位儲存字元長度 varchar的實際儲存長度能達到多少呢?依據字元編碼。看了上圖,提示是21845 再看下圖 提示size too la...

python定義變數長度 python 變數

1 python是一門弱型別語言,變數的型別由它的值確定。2 賦值 直接賦值 a 1 鏈式賦值 a b 1 序列解包賦值 a,b 1,2 等號左邊的變數和右邊的常量個數一定要一致 list a 1 3 a b a list range 10 0,1,2,3,4,5,6,7,8,9 0,1,2,3,4...

靜態儲存 動態儲存 靜態變數與動態變數

動態變數 int a 靜態變數 static int a 靜態變數,全域性動態變數都是靜態儲存,儲存在全域性資料區,在變數定義時就分定儲存單元並一直保持不變,直至整個程式結束。靜態儲存變數是一直存在的,只會初始化一次。區域性動態變數是動態儲存,動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,...