1. 程式人生 > >c/c++變數的儲存位置

c/c++變數的儲存位置

變數的記憶體一般分為5部分

  1. 棧區stack:由編譯器自動分配釋放,,存放函式的引數值,區域性變數等,對棧的操作方式類似於資料結構中的棧
  2. 堆區heap :一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束時可能由OS揮手,但是它與資料結構中的堆是兩回事,分配方式類似於連結串列。
  3. 全域性區(靜態區)satic: 全域性變數和靜態變數的儲存是放在一塊的。初始化的全域性變數和靜態變數放在一塊區域,未初始化的全域性變數和靜態變數又放在相鄰的另外一塊區域中。程式結束後由系統釋放
  4. 文字常量區:常量字串放在這裡,程式結束後由系統釋放
  5. 程式程式碼取:存放函式體的二進位制程式碼

    example:

//main.cpp 
    int a = 0; 全域性初始化區     char *p1; 全域性未初始化區     main()     {     int b;// 棧     char s[] = "abc"; //棧     char *p2; //棧     char *p3 = "123456";// 123456\0";在常量區,p3在棧上。     static int c =0//全域性(靜態)初始化區     p1 = (char *)malloc(10);     p2 = (char *)malloc(20);     //分配得來得10和20位元組的區域就在堆區。     strcpy
(p1, "123456"); //123456\0放在常量區,編譯器可能會將它與p3所指向的"123456"優化成一個地方。     }

相關推薦

c語言==變數儲存位置和堆疊的區別(18)

明顯的看出全域性變數還有static是儲存在一起的,區域性變數在一起,常數有自己的地方,malloc也是。 從而可以知道虛擬地址空間的分配: 棧空間存放區域性變數,函式形參 堆空間存放malloc,relloc,calloc分配空間、 資料段裡面有B

C++ 程式碼和變數儲存位置

棧:程式自動分配,編譯器在需要的時候分配,不需要的時候自動清除的變數儲存區 堆:程式設計師手動分配由new分配的記憶體,需要自己在程式裡面手動釋放 常量儲存區:存放的是常量,不允許修改,編譯時分配,程

C++中變數儲存型別

儲存類 auto 儲存類 auto 儲存類是所有區域性變數預設的儲存類。 {int mount;autoint month;} 上面的例項定義了兩個帶有相同儲存類的變數,auto 只能用在函式

C語言變數儲存

變數的儲存模型(儲存類)可以用變數的作用域以及它的連結和儲存時期來描述。 作用域,描述了程式中可以訪問一個標示符的一個或者多個區域 程式碼塊作用域:在程式碼塊中定義的變數,在該定義的程式碼塊中該變數可見函式原型作用域:對函式進行宣告的時候,其實在這個時候編譯器並不在乎引數變

MDK的程式設計過程和變數儲存位置

1 參考書籍《零死角玩轉STM32-F429》2 程式設計過程  首先我們簡單瞭解下 MDK 的編譯過程,它與其它編譯器的工作過程是類似的,該過程見圖 51-1。  (1) 編譯, MDK 軟體使用的編

Java記憶體分配及變數儲存位置例項講解

Java記憶體分配與管理是Java的核心技術之一,之前我們曾介紹過Java的記憶體管理與記憶體洩露以及Java垃圾回收方面的知識,今天我們再次深入Java核心,詳細介紹一下Java在記憶體分配方面的知識。一般Java在記憶體分配時會涉及到以下區域:  ◆暫存器:我們在程式中無

JVM 變數儲存位置

1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制.2. 棧:方法執行時建立方法棧幀,存放基本型別的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new 出來的物件)或者常量池中(字串常量物件存放在常量池中。)3. 堆:存放所有new出來

java 中變數儲存位置的區別

1.暫存器:最快的儲存區, 由編譯器根據需求進行分配,我們在程式中無法控制.  2. 棧:存放基本型別的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new 出來的物件)或者常量池中(字串常量物件存放在常量池中。)  3. 堆:存放所有new出來的物件。 

常量字串,字串變數——儲存位置

注意: 指標方式建立的字元陣列,是常量字串,指標指向的內容是沒法更改的;方括號([])方式建立的字元陣列僅僅是變數,內容可以更改。    string 物件沒有  ‘\0’         char text[]  字串陣列若沒有 '\0',只能當做陣列處理,若有 '

C語言變數的型別和儲存位置

1. C語言變數主要分為全域性變數、靜態全域性變數、區域性變數、靜態區域性變數和暫存器變數。其中靜態變數用static關鍵字進行修飾。程式所佔用的記憶體可以分為以下幾個部分: (1)程式碼段-存放程式程式碼,只讀的,不能修改。 (2)全域性區(靜態區),又稱為資料段。其中.data段存放的是

C語言程式碼和各種常量、變數在記憶體中的儲存位置及記憶體優化

全域性變數、靜態區域性變數儲存在全域性資料區,初始化的和未初始化的分別儲存在一起; 普通區域性變數儲存在堆疊中; 全域性變數和區域性變數在記憶體裡的區別? 一、預備知識—程式的記憶體分配  一個由c/C++編譯的程式佔用的記憶體分為以下幾個部分  1、棧區(stack

c/c++變數儲存位置

變數的記憶體一般分為5部分 棧區stack:由編譯器自動分配釋放,,存放函式的引數值,區域性變數等,對棧的操作方式類似於資料結構中的棧 堆區heap :一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束時可能由OS揮手,但是它與資料結構中的堆是兩回事,

C語言變數定義與微控制器資料儲存方式

說明:文章來源 EDN電子技術設計:嵌入式程式開發需要知道的儲存器知識 MCU 中常使用的儲存器型別有:FLASH、RAM、ROM(包括EEPROM) 在軟體角度來看,程式和資料的儲存分為以下幾個部分 程式碼段和常量段都可以用於儲存常量資料,其主要區

理解C++變數儲存模型

在理解程式記憶體一文中我們介紹了普通程式執行時在記憶體中的佈局,下面我們專門針對C++原始碼以WinDbg為工具分析下C++程式的變數儲存模型, 要理解下面的知識,請先看懂理解程式記憶體一文。下面我們嘗試分析C++變數的儲存模型, 我們的測試程式非常簡單:#include <iostream

C++中虛擬函式表儲存位置淺析

關於C++中虛擬函式表,我們知道這樣一些事實: 1. 當class中存在virtual函式時,編譯器會為這個class追加一個void** __vfptr資料成員。 2. C++程式執行時,實際函式的呼叫,是通過查詢__vfptr來獲取的,從而實現多型。 3. 多型的實現,

c語言一個字元變數儲存多個字元

#include<stdio.h> int main() { char s; char a = 'a'; scanf("%s",&s); printf("input word is:%s, %c\n",&a

C語言中變數儲存型別有哪些?

    變數的儲存型別是C語言的重要組成部分,也是C語言學習的基礎。那C語言中變數的儲存型別有哪幾種呢?在程式設計過程中又該怎樣運用呢?就這一問題,我今天給大家介紹一下!總的來說,C語言中變數的儲存型別可以分為四種,他們分別是自動變數、靜態變數、外部變數和暫存器變數這四種,

C語言支援的四種變數儲存型別

一)auto:auto稱為自動變數(區域性變數)。區域性變數是指在函式內部說明的變數(有時也稱為自動變數)。所有的非全程變數都被認為是區域性變數,所以auto實際上從來不用。區域性變數在函式呼叫時自動產生,但不會自動初始化,隨函式呼叫的結束,這個變數也就自動消失了。下次呼叫

C語言資料型別儲存位置及堆疊說明

一、預備知識—程式的記憶體分配一個由C/C++編譯的程式佔用的記憶體分為以下幾個部分1、棧區(stack)  由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2、堆區(heap)   般由程式設計師分配釋放, 若程式設計師不釋放

c 變數儲存型別auto等(基礎知識)和c函式變數

總結  1).在c語言中每一個變數和函式有兩個屬性:資料型別和資料的儲存類別。 2). 對資料型(如整型、字元型等)。儲存類別指的是資料在記憶體中儲存的方式。 儲存方式分為兩大類: 靜態儲存類和動態儲存類 具體包括四種:{自動的(auto), 靜態的(static), 暫存器(registe