_expand
modifie la taille d'un bloc de mémoire.
void *_expand(
void *memblock,
size_t size
);
Paramètres
memblock
Pointeur vers le bloc de mémoire alloué précédemment.size
nouvelle taille en octets.
Valeur de retour
_expand retourne un pointeur void au bloc de mémoire réaffecté._expand, contrairement à realloc, ne peut pas déplacer un bloc pour modifier sa taille.Ainsi, si la mémoire suffisante disponible pour développer le bloc sans le déplacement, le paramètre d' memblock à _expand est identique à la valeur de retour.
retourne NULL d'_expand lorsqu'une erreur est détectée lors de l'exécution.Par exemple, si _expand est utilisé pour réduire un bloc de mémoire, il peut détecter l'altération du tas petit ou un pointeur et un retour valides NULLde bloc de bloc.
Si la mémoire disponible est insuffisante pour développer le bloc à la taille donnée sans la déplacer, la fonction retourne NULL._expand ne retourne jamais un bloc développé à une taille inférieure à demandé.Si une erreur se produit, errno indique la nature de l'échec.Pour plus d'informations sur errno, consultez errno, _doserrno, _sys_errlist, et _sys_nerr.
Les points de valeur de retour à un espace de stockage qui est obligatoirement aligné pour le stockage d'un type d'objet.Pour activer la nouvelle taille de l'élément, utilisez _msize.Pour obtenir un pointeur vers un type autre qu' void, utilisez un cast de type sur la valeur de retour.
Notes
Les modifications de fonction d' _expand la taille d'un bloc de mémoire précédemment allouée en essayant de développer ou la contraction le bloc sans déplacer son emplacement dans le tas.les points de paramètre d' memblock au début du bloc.Le paramètre d' size attribue la nouvelle taille du bloc, en octets.Le contenu du bloc reste inchangé jusqu'à la plus courte des anciennes et nouvelles tailles.memblock ne doit pas être un bloc qui a été libéré.
[!REMARQUE]
Sur les plateformes 64 bits, _expand ne peut pas la contraction le bloc si la nouvelle taille est inférieure à la taille actuelle ; en particulier, si le bloc moins que 16K a été alloué en taille et par conséquent dans le bas tas de fragmentation, _expand quitte le bloc inchangé et retourne memblock.
Lorsque l'application est liée à une version debug des bibliothèques runtime C, _expand le résout vers _expand_dbg.Pour plus d'informations sur la façon dont le tas est exécuté pendant le processus de débogage, consultez Le tas de débogage CRT.
cette fonction valide ses paramètres.si memblock est un pointeur null, cette fonction appelle un gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.Si est autorisé à l'exécution de se poursuivre, errno est défini à EINVAL et la fonction retourne NULL.Si size est supérieure _HEAP_MAXREQ, errno est défini à ENOMEM et la fonction retourne NULL.
Configuration requise
Fonction |
en-tête requis |
---|---|
_expand |
<malloc.h> |
Pour des informations de compatibilité supplémentaires, consultez compatibilité dans l'introduction.
Exemple
// crt_expand.c
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
char *bufchar;
printf( "Allocate a 512 element buffer\n" );
if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
exit( 1 );
printf( "Allocated %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
printf( "Can't expand" );
else
printf( "Expanded block to %d bytes at %Fp\n",
_msize( bufchar ), (void *)bufchar );
// Free memory
free( bufchar );
exit( 0 );
}
Équivalent .NET Framework
Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez l' exemples d'appel de code non managé.