Was bedeutet "__builtin_alloca" ???

Gast #599351
Lesenswert?
• ▲
▼
ich hab das hier gefunden:
1
ethernetbuffer = (unsigned char*) __builtin_alloca (( size_t )
2
 ETHERNET_HEADER_LENGTH + IP_HEADER_LENGHT + UDP_HEADER_LENGHT +
3
 Datalenght );

gibts das alloca_ nur für AVR?

Kann ich das irgendwie rausnehmen?
#599359
Lesenswert?
• ▲
▼
Bert wrote:
>
> ich hab das hier gefunden:
>
>
1
> ethernetbuffer = (unsigned char*) __builtin_alloca (( size_t )
2
> ETHERNET_HEADER_LENGTH + IP_HEADER_LENGHT + UDP_HEADER_LENGHT +
3
> Datalenght );
4
>
>
> gibts das alloca_ nur für AVR?
>
> Kann ich das irgendwie rausnehmen?

Das kommt jetzt auf den Zusammenhang an. Aber ein
1
  ethernetbuffer = alloca( ( size_t ) ETHERNET_HEADER_LENGTH +
2
  IP_HEADER_LENGHT + UDP_HEADER_LENGHT + Datalenght );

sollte das eigentlich ersetzen können.
Wenn alle Stricke reissen, muesste man sich die Funktion in der
das eingesetzt wird ansehen und entscheiden ob ein Ersatz mit
malloc vernünfitg machbar ist.
Gast #599367
Lesenswert?
• ▲
▼
1
ethernetbuffer = (unsigned char*) __builtin_alloca (( size_t )
2
     ETHERNET_HEADER_LENGTH + IP_HEADER_LENGHT + UDP_HEADER_LENGHT +
3
     Datalenght );

Keine Ahnung, wozu das gut sein soll. Eigentlich sollte man alloca 
verwenden. Der Compiler bzw. der Standardheader entscheidet dann, welche 
Implementation tatsächlich verwendet wird.

> gibts das alloca_ nur für AVR?

alloca ist eine nicht-Standard-Funktion, die aber sehr weit verbreitet 
ist. Es funktioniert wie malloc, aber nimmt den Speicher für lokale 
Variablen (also üblicherweise Stack).

> Kann ich das irgendwie rausnehmen?

Du könntest es als C99 übersetzen. Dann kannst du den Aufruf ersetzen 
durch ein Array mit variabler Länge. Aber warum willst du das 
rausnehmen?
#604353
Lesenswert?
• ▲
▼
Bert wrote:
> Hallo,
>
> ich muss das malloc oder alloc irgendwie ersetzen, da mein
> Fujitsu-Compiler damit nicht klar kommt.
>
> Oder ich schreibe ihm die Definition selbst. Wo genau ist malloc mal
> definiert?


Im K&R gaabs früher mal eine malloc Implementierung. Ob sie
in der jetzt aktuellen AUsgabe immer noch drinnen ist, weiss
ich nicht.

Wenn du aber so fragen musst, dann vergiss das gleich wieder.
Einen malloc schreibt man nicht einfach so zwischen halb 12 und
Mittag.

Was genau bedeutet: "damit nicht klar kommt"?
Gast #604469
Lesenswert?
• ▲
▼
Ich weis nicht genau ob es daran liegt, aber ich kann es mir denken.

Das gehört alles zu einem UDP-Sende-Projekt.
Es funktioniert mit dem AVR ohen Probleme, lade ich aber den Code auf 
einen Fujitsu, so entsteht eine Lücke im Ethernet-Frame (an der stelle 
der IP-Checksumme, die wird einfach übergangen). Dadurch verfälscht der 
komplette Frame.
Moderator Persönliche Seite #605148
Lesenswert?
• ▲
▼
Bert wrote:

> ich muss das malloc oder alloc irgendwie ersetzen, da mein
> Fujitsu-Compiler damit nicht klar kommt.

Dann bist du hier im falschen Forum...

Wenn dein Fujitsu-Compiler wenigstens Arrays variabler Länge (als
lokale Variable) kann, dann kannst du das alloca() dadurch
ersetzen.  Siehe Rolf Magnus ganz oben, ist ein C99-Fietscher.

Wenn er das nicht kann, bleibt dir eigentlich nur noch, das Array
mit der größtmöglichen anzunehmenden Größe zu definieren.

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