Quelle est la taille de cette structure C #?
Est-il 12 octets 16 octets stockés dans un List<DataPoint>
?
public struct DataPoint
{
DateTime time_utc;
float value;
}
Est-il sizeof fonction en C#?
source d'informationauteur Meh
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à @Hans Passant la réponse de ici pour arrière-plan intéressant sur cette question, esp. ce qui concerne les limitations de
Marshal.Sizeof
.Marshal.SizeOf()
http://msdn.microsoft.com/en-us/library/y3ybkfb3.aspx
Le CLR est libre de disposer de types de mémoire comme il l'entend. Il n'est donc pas possible de donner directement de l' "le" taille de.
Cependant, pour les structures, il est possible de restreindre la liberté de la CLR à l'aide de la StructLayout Attribut:
Le compilateur C# s'applique automatiquement le Séquentielle disposition de nature à toute structure. Le Pack valeur par défaut est de 4 ou 8 sur x86 ou x64 machines respectivement. Donc la taille de votre structure est de 8+4=12 (x86 et x64).
Sans rapport avec de la façon dont un type est mis en mémoire, il est également possible de maréchal un type dans .NET en utilisant les Le Maréchal De Classe. Le marshaller applique plusieurs transformations lors du débranchement d'un type, de sorte que le résultat n'est pas toujours la même que la façon dont le CLR énoncés du type. (Par exemple, un
bool
prend 1 octet en mémoire plus de l'alignement, alors que le marshaller commissaires unbool
à 4 octets.)Il sera de 12 octets (4 pour les float, 8 pour le type DateTime);
Marshal.SizeOf
sera de retour le 16 parce que le défaut d'emballage est de 8 octets alignés.Cette est un bon article sur les structures et l'emballage. Il donne une description complète de ce qui se passe réellement.
Essayer Maréchal.SizeOf(typeof(DataPoint))