簡體   English   中英

為什么堆棧 memory 位置不被並行塊重用?

[英]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

正如你看到的,

  1. bl1的變量分配在main的變量下方,而其他兩個塊的變量分配在上方
  2. bl2bl3的變量重用分別留在bl1bl1bl2上的空堆棧空間。

該程序是使用單個選項-g編譯的,因為-Og -g-O3 -g-Os -g等選項組合不允許我在內部塊中設置斷點。

為什么堆棧 memory 位置不被並行塊重用?

因為您使用禁用的優化進行編譯,這實際上意味着重用 memory 位置的優化被禁用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM