Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Em vez de forçar uma chamada distinta para cada nó da árvore ou gráfico, você pode direcionar os stubs para calcular o tamanho dos dados e alocar e liberar memória fazendo uma única chamada para midl_user_allocate ou midl_user_free. O atributo ACF [alocar(all_nodes)] direciona os stubs para alocar ou liberar todos os nós em uma única chamada para as funções de gerenciamento de memória fornecidas pelo usuário.
Por exemplo, um aplicativo RPC pode usar a seguinte estrutura de dados de árvore binária:
/* IDL file fragment */
typedef struct _TREE_TYPE
{
short sNumber;
struct _TREE_TYPE * pLeft;
struct _TREE_TYPE * pRight;
} TREE_TYPE;
typedef TREE_TYPE * P_TREE_TYPE;
O atributo ACF [alocar(all_nodes)] aplicado a esse tipo de dados aparece na declaração typedef no ACF como:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
O atributo [alocar] só pode ser aplicado a tipos de ponteiro. O atributo [alocar] ACF é uma extensão da Microsoft para DCE IDL e, como tal, não está disponível se você compilar com a opção de MIDL /osf. Quando [alocar(all_nodes)] é aplicado a um tipo de ponteiro, os stubs gerados pelo compilador MIDL atravessam a estrutura de dados especificada para determinar o tamanho da alocação. Em seguida, os stubs fazem uma única chamada para alocar toda a quantidade de memória necessária para o gráfico ou árvore. Um aplicativo cliente pode liberar memória de forma muito mais eficiente fazendo uma única chamada para midl_user_free. No entanto, o desempenho do stub do servidor geralmente é aumentado ao usar a alocação de memória nó a nó porque os stubs do servidor geralmente podem usar memória privada que não requer alocações.
Para obter informações adicionais, consulte de alocação e desalocação de nó por nó.