回答
取決於寫入行的位置。如果它在函數內部,那麼變量將具有自動存儲。這意味着它將在函數執行時存儲在堆棧中。當函數退出時不會存在。
如果它在「文件範圍」中,它將具有靜態存儲。並且在程序運行的整個過程中都會存在。
另外,弗拉德指出。如果編譯器檢測到它未被使用或具有恆定值,則可以優化變量。在這種情況下,它根本不會佔用任何空間。
請注意,我正在談論變量本身。名字不與程序一起存儲。本地代碼不需要變量名稱來訪問它,它只需要知道它所在的內存區域。
恕我直言,還值得一提的是,變量可能完全由編譯器「優化」。 – 2013-07-24 13:40:41
謝謝@VladLazarenko :) – StoryTeller
-1:您直到bootnote纔回答問題。 –
在本地語言中,變量名稱不佔用任何空間。
名稱不,變量。 – 2013-07-24 13:39:48
@VladLazarenko:OP,詢問存儲在內存中的變量**名稱**。你讀過這個問題了嗎? –
...你一般的意思是「低級編譯語言」。不知道「本地」甚至意味着什麼。 –
我試過很多知道在內存
做我店一般情況下,它不存儲在可執行的內存。
在程序鏈接^之前,字符串「i
」被丟棄,目標代碼(對於這個特定的例子)減少到註冊訪問。
編譯器知道約i
並保持它與此代碼使用的其他寄存器不同。
如果你想找到一些方式來獲得訪問該字符串,它可能是通過是存儲與程序調試符號。不幸的是,訪問這些數據不適用於新手,並且不是特別便攜的。
^實際上,這隻有在您顯示的代碼位於本地範圍內時才爲真。在文件範圍內,字符串i
被保留用於鏈接,並且只有鏈接器才能將其丟棄。
下面是我的編譯器提供的第一個中間輸出示例。我冒昧地將你的陳述放在當地的範圍內。包含****
的行是我編譯器包含的註釋,以便將源與程序集關聯起來很容易。它們不被彙編程序使用(編譯中的下一個階段)。 i
已被間接訪問%rbp
所取代。
1:w.c ****
2:w.c **** int main()
3:w.c **** {
9 .loc 1 3 0
10 .cfi_startproc
11 0000 55 pushq %rbp
12 .LCFI0:
13 .cfi_def_cfa_offset 16
14 .cfi_offset 6, -16
15 0001 4889E5 movq %rsp, %rbp
16 .LCFI1:
17 .cfi_def_cfa_register 6
4:w.c **** int i = 10;
18 .loc 1 4 0
19 0004 C745FC0A movl $10, -4(%rbp)
19 000000
5:w.c ****
6:w.c **** return 0;
20 .loc 1 6 0
21 000b B8000000 movl $0, %eax
21 00
7:w.c **** }
在後面的清單中我們可以看到i
的調試符號。
55 004e 5F000000 .long 0x5f
56 0052 03 .uleb128 0x3
57 0053 6900 .string "i"
58 0055 01 .byte 0x1
59 0056 04 .byte 0x4
60 0057 5F000000 .long 0x5f
61 005b 02 .byte 0x2
這正是OP必須要找的東西.... so +++++++++++ 1 :) – 0decimal0
的名字甚至沒有在你完成,編譯的程序存在。在源代碼中這只是一個方便的功能,可以讓人們閱讀。在那個階段,編譯後的二進制文件中找不到變量名稱—,它們已被複雜的糾纏指針和數字網絡所取代。
- 1. MATLAB分配變量名稱
- 2. 在函數內部分配名稱空間變量
- 3. 刪除R中所有變量的部分變量名稱
- 4. tcl使用名稱空間名稱中的變量
- 5. 全局變量的名稱空間
- 6. 用於枚舉名稱空間中所有類的WQL
- 7. 在.NET中分配的變量名稱
- 8. 分配名稱空間包子模塊
- 9. 從變量創建類名稱空間
- 10. 隱藏變量名稱空間C++
- 11. 將名稱空間保存到變量
- 12. Python名稱空間和全局變量
- 13. 「變量名稱」需要多少空間?
- 14. 將所有自定義字段分配給具有相同名稱的變量?
- 15. Rails爲變量分配名稱
- 16. Tensorflow:按名稱分配變量
- 17. 刪除屬於特定名稱空間的所有XML元素
- 18. 是否有與名稱空間名稱相同的變量是正確的
- 19. 分配空間大於數組所需空間的意義
- 20. 創建具有變量類名稱和名稱空間的對象
- 21. 將變量匹配到基於變量名稱的列表
- 22. 如何爲@property變量分配空間
- 23. 分配空間變量在Unix中
- 24. 分配給名稱變量或變量的值
- 25. 名稱空間上的變量是否總是有默認值?
- 26. Rails 3具有變量名稱空間的路由資源
- 27. DoxyPy - 沒有記錄名稱空間的成員(變量)
- 28. 有沒有辦法爲css claas名稱分配變量?
- 29. python函數如何將所有變量放在全局名稱空間中?
- 30. 分享JavaScript庫的名稱空間或使用您自己的名稱空間?
根本不存儲變量*名稱*。它可能存儲在調試符號中,但不存在於實時代碼中。唯一需要存儲的是變量本身。 –
你認爲變量名和變量名有什麼區別嗎? – haccks