Array größe berechnen

Gast #6124733
Lesenswert?

Es ist 6x sizeof(Test).

sizeof(unsigned char) sind 1 Byte.
Der Zeiger ist abhängig vom System, aktuellere Prozessoren 32Bit (4Byte) 
oder sogar 64Bit (8Byte)
So, und dann kommt noch hinzu, dass in einem Struct die Variablen an 
ihren Größen gerne 'aligned' abgelegt werden. Ein 32Bit Variable liegt 
also gerne mal an einer 32Bit Speichergrenze, d.h. die niedrigsten 
(4-1)Bit in der Adresse sind 0.
Es kann also sein, dass so ein Struct 6x 16Byte wegnimmt oder auch nur 
6x 2Byte auf einem 8Bit Mikrocontroller.

Gruß
Daniel
Gast #6124739
Lesenswert?

Ingo Less schrieb:
> Hatte den Stern übersehen :(

Selbst dann ....

Habe mal getestet, wie weit die Spanne so im Extrem gehen kann:

Arduino UNO sagt 18 Byte
ESP8266 sagt 48 Byte
Sipeed Maix Dock M1W sagt 96 Byte

Das ist u.U. schon erheblich mehr als 12 Byte


Testcode:
1
typedef struct
2
{
3
  unsigned char Test1;
4
  unsigned char* Test2;
5
} Test;
6

7
Test Array[6];
8

9
void setup() 
10
{
11
 Serial.begin(9600);
12

13
}
14

15
void loop() 
16
{
17
  Serial.println(sizeof(Array));
18
}

Pointer schrieb:
> ohne Wissen über das System
Eben.
Gast #6124750
Lesenswert?

Dirk B. schrieb:
> Oliver S. schrieb:
>> Ziemlich
>> sicher ist da nur, daß das Array letzendlich 6 mal so groß ist wie ein
>> einzelnes Element.
>
> Und die Größe einer struct wird so bemessen, dass sie bei einem Array
> ohne Füllbytes auskommt.
> typedef struct
> {
>   unsigned char* Test2;
>   unsigned char Test1;
> } Test;hat dieselbe Größe

Wenn ich auf einem 32Bit Arm mit hartem Alignment arbeite, ist Test2 
immer an 32Bit Grenzen ausgerichtet. Das heißt aber auch, dass nach 
Test1 drei ungenutze Bytes liegen.

Gruß
Daniel
#6124792
Lesenswert?

peter schrieb:
> ...also ich habe einen 32Bit System.

Das reicht nicht aus als Information. Du musst schon 
Prozessorarchitektur und Compiler (evtl. auch Version) spezifizieren, 
denn genau die legen das fest.

Oder du machst einfach ein printf("%d\n", sizeof(Array)) und lässt dir 
die Antwort vom gleichen Compiler geben, der auch die Struktur baut.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren