C語言中變量的內存排布

以前對C語言的變量在內存中的排布有些混淆,故進行了如下幾個方面的簡要整理(全部的實例均是基於X86 PC Ubuntu上GCC編譯的)。ide

  1. 變量定義時,不一樣的變量分配的內存地址的增加方向
    (1) 定義兩個全局變量,在賦值編譯後打印其在內存中分配的地址,發現先定義的變量被分配在內存中的低地址中
    C語言中變量的內存排布
    C語言中變量的內存排布
    (2) X86 PC Ubuntu的main函數中定義變量,使用gcc編譯時查看系統對變量分配的內存地址(內存分配的增加方向是低地址到高地址)
    C語言中變量的內存排布
  2. 結構體實例化以後,結構體中成員分配的內存地址的增加方向
    (1) 定義全局結構體且初始化,gcc編譯後查看結構體成員內存分配的增加方向(內存分配的增加方向是由低向高向上增加)
    C語言中變量的內存排布
    (2) 在main函數中對結構體且初始化,gcc編譯後查看結構體成員內存分配的增加方向(內存分配的增加方向是由低向高向上增加)
    C語言中變量的內存排布
  3. 函數中定義變量時,使用的棧空間的內存的增加方向
    C語言中變量的內存排布
  4. arm在使用arm交叉編譯工具鏈時,通常的變量的內存分配是向上增加方向的,可是對於棧上的內存分配時採用的滿減棧的方式對棧上內存分配給變量使用的,棧的生長方向時向下生長方向的.
相關文章
相關標籤/搜索