force_allocate 특성

ACF 특성 [force_allocate]은 할당을 최적화하는 대신 midl_user_allocate 사용하여 포인터 매개 변수를 강제로 할당합니다.

[ [function-attribute-list <>] ] type-specifier <> [pointer- <>declarator <>] function-name <>( [ force_allocate [ , parameter-attribute-list <> ] ] type-specifier <> [declarator <>] , ...);

매개 변수

이 특성에는 매개 변수가 없습니다.

설명

RPC는 내부 메모리 버퍼에 대한 포인터를 제공하여 서버의 메모리 할당을 최소화하려고 시도합니다. 이 방법은 최적화된 포인터를 해제할 수 없으므로 RPC 제공 포인터에서 midl_user_free 직접 호출하려는 애플리케이션에 문제가 발생할 수 있습니다. 매개 변수를 [force_allocate] 로 표시하면 매개 변수를 파생하는 모든 포인터에 대해 이 최적화가 방지됩니다.

[force_allocate]에 대한 또 다른 일반적인 용도는 애플리케이션이 가리키는 메모리보다 큰 맞춤이 필요한 경우 가리키는 메모리의 맞춤을 보장하는 것입니다. 예를 들어 애플리케이션은 실제 형식을 사용하는 대신 바이트의 제네릭 배열로 데이터를 전달하는 경우가 많지만 바이트는 1에만 정렬되도록 보장되므로 더 큰 맞춤을 가정하는 애플리케이션에 문제가 발생할 수 있습니다. 매개 변수를 [force_allocate]로 표시하면 애플리케이션은 가리키는 모든 메모리가 midl_user_allocate 보장되는 것과 동일한 맞춤을 갖도록 보장할 수 있습니다.

/* IDL file */
void Func1([in, out, string] char **ppstr);
void Func2([in] long s, [in, size_is(s)] byte *pData);

/* ACF file */

/* e.g. The application wishes to call midl_user_free on *ppstr and supply a new pointer */
Func1([force_allocate] pstr);

/* e.g. pData really points to a structure that needs an alignment greater than 1 */
Func2([force_allocate] pData);

참고 항목

정보 숨기기 방지

64비트 호환 인터페이스 디자인

midl_user_allocate

midl_user_free

할당