2012-02-08 17 views
5

¿Cuál es el propósito de ANYSIZE_ARRAY, ubicado en WinNT.h?¿Cuál es el propósito de ANYSIZE_ARRAY en <winnt.h>?

Veo una publicación de blog de MSDN sobre ella desde 2004, pero no tiene sentido para mí.

+0

¿Desea un enlace a la publicación de blog de MSDN? –

+0

@Agnel http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – jglouie

Respuesta

5

Supongo que usted está hablando de this blog post.

A menudo se utiliza cuando una matriz de tamaño variable (desconocida en tiempo de compilación) es parte de una estructura:

typedef struct { 
    int CommonFlags 
    int CountOfThings; 
    THING Things[ANYSIZE_ARRAY]; //Things[1]; 
} THINGSANDFLAGS; 

Para trabajar con esas estructuras a menudo se llama primero la API deseada para obtener el tamaño de los datos, luego asigne un bloque de memoria lo suficientemente grande y, finalmente, vuelva a llamar a la misma API para que pueda completar los datos ...

+0

gracias, ¿por qué usar esto en una lista vinculada? – jglouie

+1

@LemonBeagle Una lista vinculada requiere más memoria y/o la implementación de la API ya puede tener los elementos en una matriz internamente y puede simplemente memcpy en el buffer de llamadas. También es más lento recorrer la lista de artículos y tienes que liberar cada elemento y no solo un gran buffer ... – Anders

1

De this page:

En C, una matriz de tamaño variable se declara como a[1] o a[ANYSIZE_ARRAY], donde ANYSIZE_ARRAY se define como 1. Entonces se usa como si fuera más grande.

Cuestiones relacionadas