BSS jest symbolem zastępczym zdefiniowanym w pliku wykonywalnym (lub ELF). Nie zajmuje więc miejsca na dysku, a jedynie określa, jaki region pamięci powinien zostać przydzielony przez łącznik lub program ładujący.
Dokładna operacja zależy od systemu operacyjnego. Ponieważ odwołujesz się do ELF, zakładam, że jest on przeznaczony do użytku w systemie wbudowanym. Jeśli tworzysz kod ROMmable, twój plik cmd linkera zmapuje BSS do statycznego regionu adresu.
W przypadku kompilacji dla systemu operacyjnego (tj. Systemu Linux) program ładujący z systemu operacyjnego wykona przesiadkę, w której mapuje wszystkie lokalizacje oznaczone jako względne w formacie możliwym do wykonania na fizyczne lub logiczne lokalizacje w pamięci.
Ponieważ wspominasz, zawsze widząc tę samą wartość, oznacza to, że proces jest powtarzalny dla twojego systemu. Można spodziewać się zmian, gdy zmienisz pliki łącznika (tj. Regiony adresowe), kolejność łączy (tj. Moduły otrzymają przydzielone miejsce w innej kolejności) lub system operacyjny.
Nawet jeśli korzystasz z wartości BSS, adres pozostanie taki sam dla procesu, który uruchomisz.
Zauważyłem, że zaakceptowałeś odpowiedź 5 minut po zadaniu pytania. Otrzymasz więcej odpowiedzi, jeśli pozostawisz to otwarte przez jakiś czas, ponieważ ludzie będą bardziej zmotywowani do poprawy odpowiedzi. – Adriaan
Dzięki za podpowiedź, na pewno zrobię to następnym razem. – Patrick