¿Dónde se almacenan las variables estáticas en C y C ++?

¿En qué segmento (.BSS, .DATA, otro) de un archivo ejecutable se almacenan variables estáticas para que no tengan colisión de nombres? Por ejemplo


foo.c:                         bar.c:
static int foo = 1;            static int foo = 10;
void fooTest() {               void barTest() {
  static int bar = 2;            static int bar = 20;
  foo++;                         foo++;
  bar++;                         bar++;
  printf("%d,%d", foo, bar);     printf("%d, %d", foo, bar);
}                              }

Si compilo ambos archivos y los vinculo a un main que llama a fooTest () y barTest repetidamente, las declaraciones printf se incrementan independientemente. Tiene sentido ya que las variables foo y bar son locales de la unidad de traducción.

¿Pero dónde está asignado el almacenamiento?

Para ser claros, la suposición es que tiene una cadena de herramientas que generaría un archivo en formato ELF. Por lo tanto, yocree que haytien para que quede un espacio reservado en el archivo ejecutable para esas variables estáticas.
Para fines de discusión, supongamos que usamos la cadena de herramientas GCC.

Respuestas a la pregunta(32)

Su respuesta a la pregunta