Compartilhar via


Resumo das regras de alocação de memória

A tabela a seguir resume as regras-chave relativas à alocação de memória.

Elemento MIDL Descrição
Ponteiros de nível superior [ ref] Devem ser ponteiros não nulos.
Valor retornado da função A nova memória é sempre alocada para valores de retorno de ponteiro.
[ exclusivo, ] ou [ ptr, out] ponteiro Não permitido por MIDL.
Não de nível superior [exclusivo , em, ] ou [ptr, dentro, fora] ponteiro que muda de nulo para não nulo Os stubs do cliente alocam nova memória no cliente no retorno.
Ponteiro não de nível superior [exclusivo, no, ] que muda de não nulo para nulo A memória é órfã no cliente; O aplicativo cliente é responsável por liberar memória e evitar vazamentos.
Ponteiro não de nível superior [ptr, no, ] que muda de não nulo para nulo A memória ficará órfã no cliente se não for alias; O aplicativo cliente é responsável pela liberação e prevenção de vazamentos de memória nesse caso.
[ref] ponteiros A camada cliente-aplicativo geralmente aloca.
Ponteiro não nulo [em, ] Os stubs tentam gravar no armazenamento existente no cliente. Se [cadeia de caracteres] e o tamanho aumentarem além do tamanho alocado no cliente, isso causará uma falha de GP no retorno.

 

A tabela a seguir resume os efeitos dos atributos de chave IDL e ACF no gerenciamento de memória.

Recurso MIDL Problemas de cliente Problemas de servidor
[ alocar(single_node)], [allocate(all_nodes)] Determina se uma ou muitas chamadas são feitas para as funções de memória. O mesmo que o cliente, exceto a memória privada, geralmente pode ser usada para alocar (single_node) [dentro] e [dentro,out] dados.
[allocate(free)] ou [allocate(dont_free)] (Nenhum; afeta o servidor.) Determina se a memória no servidor é liberada após cada chamada de procedimento remoto.
atributos de matriz [ max_is] e [ size_is] (Nenhum; afeta o servidor.) Determina o tamanho da memória a ser alocada.
[ byte_count] O cliente deve alocar buffer; não alocado ou liberado por stubs de cliente. O atributo de parâmetro ACF determina o tamanho do buffer alocado no servidor.
[ enable_allocate] Normalmente, nenhum. No entanto, o cliente pode estar usando um ambiente de gerenciamento de memória diferente. O servidor usa um ambiente de gerenciamento de memória diferente. RpcSmAllocate deve ser usada para alocações.
[ no atributo ] Aplicativo cliente responsável por alocar memória para dados. Alocado no servidor por stubs.
[ atributo] Alocado no cliente por stubs. [ponteiro ]-only deve ser [ref] ponteiro; alocado no servidor por stubs.
[ ref] atributo A memória referenciada por ponteiro deve ser alocada pelo aplicativo cliente. Ponteiros de referência de nível superior e de primeiro nível gerenciados por stubs.
[ atributo] exclusivo Não nulo para nulo pode resultar em memória órfã; nulo para não nulo faz com que o stub do cliente chame midl_user_allocate. (Afeta o cliente.)
[ atributo ptr] (Consulte [ exclusivo ].) (Consulte [ exclusivo ].)