[英]Why are the stack memory locations not reused by parallel blocks?
我知道 GNU CC 有一個非常復雜的變量分配機制。 但是,我想了解以下奇怪行為背后的原因。
使用gdb
我調試了以下程序:
#include <stdio.h>
int main(void)
{
int a, b;
{ /* bl1 */
int a1 = 101, b1 = 201;
a = a1; b = b1;
}
printf ("%d %d\n", a, b);
{ /* bl2 */
int a2 = 102, b2 = 202;
a = a2; b = b2;
}
printf ("%d %d\n", a, b);
{ /* bl3 */
int a3 = 103, b3 = 203;
a = a3; b = b3;
}
printf ("%d %d\n", a, b);
}
所有局部變量的 memory 位置都是這樣的(下面僅給出 memory 地址的最后兩個十六進制數字,因為用...
表示的數字是相同的):
-/* bl3 */
b3 ...5c
a3 ...58
-/* bl2 */
b2 ...54
a2 ...50
-/* main */
b ...4c
a ...48
-/* bl1 */
b1 ...44
a1 ...40
正如你看到的,
bl1
的變量分配在main
的變量下方,而其他兩個塊的變量分配在上方。bl2
和bl3
的變量不重用分別留在bl1
和bl1
和bl2
上的空堆棧空間。 該程序是使用單個選項-g
編譯的,因為-Og -g
、 -O3 -g
或-Os -g
等選項組合不允許我在內部塊中設置斷點。
為什么堆棧 memory 位置不被並行塊重用?
因為您使用禁用的優化進行編譯,這實際上意味着重用 memory 位置的優化被禁用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.