Le 12/06/2019 à 11:17, aitor a écrit :
Hi Didier,

En 12 de junio de 2019 7:40:08 Didier Kryn <k...@in2p3.fr> escribió:





sizeof() is not a real function. Its syntax makes it look like a
function but it is not. Its argument can be either a variable or a type
(which no function can have). It is evaluated at compile time - which is
equivalent to replacing it with the litteral value.








Didier

But, in this concrete case, the size can be evaluated at compile time because the memory is asigned statically by using a char array (instead of a char* pointer). In the case of a dinamic memory asignment (runtime), the size would be the value of the N variable used in the malloc function.

BTW, i recently added the systray icon to simple-netaid:

https://git.devuan.org/aitor_czr/simple-netaid/blob/master/screenshots/systray-icon.png


    What I meant in this discussion is that sizeof() allows to calculate the number of elements of an array, because we make assumptions on data layout, but this is an artefact and I don't think it is specified by the language wether the result is exact or not.

    Let's consider the following type:

typedef struct {int i; short h} sesqui_int;

    One would naively consider that sizeof(sesqui_int) is equal to 6. But, with gcc, the value is 8, which looses 2 bytes in which it could store a short or two chars. This is because this struct must be aligned on a 4-byte boundary and, if you make an array of these, sizeof(sesqui_int)*number_of_elements must give the size of the array. Gcc has chosen to return a wrong sizeof() for the sake of preserving a naive size arithmetic.

    Another implementation of the C language might decide to add headers to arrays, in which it would store the size to perform strict runtime checks. In this case the size of an array would be larger than the sum of the sizes of its elements.

    Therefore this use of sizeof(), even though widespread, remains a trick.

    Didier




_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to