2011-10-26 11 views

Odpowiedz

7

.bss zużywa "pamięć", ale nie zajmuje miejsca w pliku wykonywalnym. Jego jedynym celem jest przechowywanie danych z zerowej ilości danych (jak wiesz).

.data (i powiązane sekcje takie jak rodata) faktycznie zajmują miejsce w pliku wykonywalnym i zwykle przechowuje ciągi, liczby całkowite, a nawet całe obiekty.

W typowym programie znajduje się wiele danych zainicjowanych zerowo, więc posiadanie danych nie zużywa dodatkowego miejsca w pliku wyjściowym jest znaczącą premią.

Jeśli chodzi o wiele. * Sekcje danych ... .rodata/.data mogą być użyte jako wskazówka dla ochrony pamięci (nie zezwalaj na nadpisywanie .rodata, zezwól na odczyt/zapis do .data).

+0

Czy możesz podać kilka przykładów? Widok pamięci, instrukcje asm itp. – Bruce

+3

@Bruce: w czasie wykonywania zasadniczo nie ma różnicy między .data i .bss. Różnica polega na wyjściu łącznika (jedna sekcja istnieje na dysku, a druga nie) oraz na tym, jak program ładujący wykonuje ładowanie sekcji. .data jest kopią - program ładujący może używać memcpy ... .bss jest wyzerowany - program ładujący może użyć elementu memset. –

Powiązane problemy