section
pragma
Cria uma seção em um arquivo OBJ.
Sintaxe
#pragma section( "
nome"
da seção,
[ atributos ])
Comentários
Os termos segmento e seção têm o mesmo significado neste artigo.
Quando uma seção é definida, ela permanece válida pelo restante da compilação. Porém, você deve usar __declspec(allocate)
, ou não será colocado nada na seção.
O nome da seção é um parâmetro obrigatório que será o nome da seção. O nome não deve estar em conflito com os nomes de seção padrão. Consulte /SECTION
para obter uma lista de nomes que não devem ser usados ao criar uma seção.
atributos é um parâmetro opcional que consiste em um ou mais atributos separados por vírgulas que você deseja atribuir à seção. Os atributos possíveis são:
Atributo | Descrição |
---|---|
read |
Permite operações de leitura em dados. |
write |
Permite operações de gravação em dados. |
execute |
Permite que o código seja executado. |
shared |
Compartilha a seção entre todos os processos que carregam a imagem. |
nopage |
Marca a seção como não paginável. Útil para drivers de dispositivo Win32. |
nocache |
Marca a seção como não pode ser armazenada em cache. Útil para drivers de dispositivo Win32. |
discard |
Marca a seção como não descartável. Útil para drivers de dispositivo Win32. |
remove |
Marca a seção como não residente na memória. Somente para drivers de dispositivo virtual (VxD). |
Se não especificar nenhum atributo, a seção terá os atributos read
e write
.
Exemplo
Nesse exemplo, a primeira seção pragma identifica a seção e seus atributos. O inteiro j
não é colocado em mysec
porque não foi declarado usando __declspec(allocate)
. Em vez disso, j
entra na seção de dados. O inteiro i
entra em mysec
por causa do atributo de classe de armazenamento __declspec(allocate)
.
// pragma_section.cpp
#pragma section("mysec",read,write)
int j = 0;
__declspec(allocate("mysec"))
int i = 0;
int main(){}