code_seg
Określa segment tekstu, w którym funkcje są przechowywane w pliku .obj.
#pragma code_seg( [ [ { push | pop }, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )
Uwagi
Dyrektywa pragma code_seg nie kontroluje umieszczania kodu obiektowego wygenerowanego dla szablonów skonkretyzowanych ani kodu niejawnie wygenerowanego przez kompilator — na przykład funkcji specjalnych elementów członkowskich.Firma Microsoft zaleca używanie zamiast tego atrybutu __declspec(code_seg(...)), ponieważ daje on kontrolę nad umieszczaniem całego kodu obiektowego.Obejmuje to kod wygenerowany przez kompilator.
Segment w pliku .obj to nazwany blok danych, który jest ładowany do pamięci jako jednostka.Segment tekstu to segment, który zawiera kod wykonywalny.W tym artykule terminy segment i sekcja są używane zamiennie.
Dyrektywa pragmy code_seg informuje kompilator, aby umieścić cały kolejny kod obiektowy z jednostki translacji w segmencie tekstu o nazwie segment-name.Domyślnie segment tekstu używany dla funkcji w pliku .obj ma nazwę .text.
Dyrektywa pragmy code_seg bez parametrów resetuje nazwę segmentu tekstu dla kolejnego kodu obiektowego do postaci .text.
Push (opcjonalne)
Umieszcza rekord na wewnętrznym stosie kompilatora.push może mieć identifier i segment-name.pop (opcjonalne)
Usuwa rekord z góry wewnętrznego stosu kompilatora.identifier (opcjonalne)
Gdy jest używane z push, przypisuje nazwę rekordowi na wewnętrznym stosie kompilatora.Gdy jest używane z pop, zdejmuje rekordy z wewnętrznego stosu aż do usunięcia identifier; jeśli identifier nie zostanie znaleziony na wewnętrznym stosie, nic nie zostanie zdjęte.identifier umożliwia zdjęcie wielu rekordów przy użyciu tylko jednego polecenia pop.
„segment-name” (opcjonalne)
Nazwa segmentu.Gdy jest używane z pop, stos jest zdejmowany, a segment-name staje się aktywną nazwą segmentu tekstu.„segment-class” (opcjonalne)
Ignorowanie, ale włączone dla zachowania zgodności z C++ w wersji wcześniejszej niż wersja 2.0.
Można użyć aplikacji DUMPBIN.EXE, aby wyświetlić pliki .obj.Wersje DUMPBIN dla każdej obsługiwanej architektury docelowej są dołączone do Visual Studio.
Przykład
W tym przykładzie przedstawiono sposób użycia dyrektywy pragmy code_seg do kontroli, gdzie umieścić kod obiektowy:
// pragma_directive_code_seg.cpp
void func1() { // stored in .text
}
#pragma code_seg(".my_data1")
void func2() { // stored in my_data1
}
#pragma code_seg(push, r1, ".my_data2")
void func3() { // stored in my_data2
}
#pragma code_seg(pop, r1) // stored in my_data1
void func4() {
}
int main() {
}
Aby uzyskać listę nazw, które nie powinny być używane do tworzenia sekcji, zobacz /SECTION.
Można również określić sekcje dla danych zainicjowanych (data_seg), niezainicjowanych danych (bss_seg) i zmiennych const (const_seg).