Ist das ein Standard-Makro oder sowas?
Wie der Name schon sagt, ist es eine einebaute Version von alloca. Warum interessiert dich das?
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?
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.
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?
alloca() ist mittlerweile (aber noch nicht in einem Release) auch in der avr-libc ,,offiziell'' deklariert. Die Deklaration lautet:
1 | extern void *alloca(size_t); |
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?
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"?
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.
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.
In meiner K&R Version ist übrigens das Malloc-Beispiel (noch?) drin. Tolle Sache ;)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.