code_seg
Especifica o segmento de texto onde as funções são armazenadas no arquivo .obj.
#pragma code_seg( [ [ { push | pop }, ] [ identifier, ] ] [ "segment-name" [, "segment-class" ] )
Comentários
A diretiva de pragma code_seg não controla o posicionamento do código de objeto gerado por modelos instanciados, nem do código gerado implicitamente pelo compilador (por exemplo, funções membro especiais). É recomendável usar o atributo __declspec(code_seg(...)) no lugar, pois ele proporciona controle sobre o posicionamento de todo o código de objeto. Isso inclui o código gerado pelo compilador.
Um segmento em um arquivo .obj é um bloco de dados nomeado que é carregado na memória como uma unidade. Um segmento de texto é um segmento que contém código executável. Neste artigo, os termos segmento e seção são usados alternadamente.
A diretiva de pragma code_seg informa o compilador para colocar todos os códigos de objeto subsequentes da unidade de tradução em um segmento de texto denominado segment-name. Por padrão, o segmento de texto usado para funções em um arquivo .obj é denominado .text.
Uma diretiva de pragma code_seg sem parâmetros redefine o nome do segmento do texto do código de objeto subsequente para .text.
Push (opcional)
Coloca um registro na pilha interna do compilador. Um push pode ter um identifier e segment-name.pop (opcional)
Remove um registro do topo da pilha interna do compilador.identifier (opcional)
Quando usado com push, atribui um nome ao registro na pilha interna do compilador. Quando usado com pop, elimina registros da pilha interna até que identifier seja removido; se identifier não for localizado na pilha interna, nada será exibido.identifier habilita vários registros a serem exibidos com apenas um comando pop.
"segment-name" (opcional)
O nome de um segmento. Quando usado com pop, a pilha é exibida e segment-name torna-se o nome ativo do segmento de texto."segment-class" (opcional)
Ignorado, mas incluído para compatibilidade com versões C++ anteriores à versão 2.0.
Você pode usar o aplicativo DUMPBIN.EXE para exibir arquivos .obj. As versões de DUMPBIN para cada arquitetura de destino com suporte estão incluídas em Visual Studio.
Exemplo
Este exemplo mostra como usar a diretiva de pragma code_seg para controlar onde o código de objeto será colocado:
// 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() {
}
Para obter uma lista de nomes que não devem ser usados para criar uma seção, consulte /SECTION.
Você também pode especificar seções para dados inicializados (data_seg), dados não inicializados (bss_seg) e variáveis constantes (const_seg).