¿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í.
¿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í.
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 ...
gracias, ¿por qué usar esto en una lista vinculada? – jglouie
@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
De this page:
En C, una matriz de tamaño variable se declara como
a[1]
oa[ANYSIZE_ARRAY]
, dondeANYSIZE_ARRAY
se define como1
. Entonces se usa como si fuera más grande.
¿Desea un enlace a la publicación de blog de MSDN? –
@Agnel http://blogs.msdn.com/b/oldnewthing/archive/2004/08/26/220873.aspx – jglouie