Forum: Mikrocontroller und Digitale Elektronik speicher allokieren


von Bernd S. (mms)


Lesenswert?

Hallo,

gibt es eine gute möglichkeit in c speicher während das programm läuft 
zu allokieren?

In meinem Fall besitze ich eine union:
1
union Example {
2
3
  unsigned char  uchar[0]; 
4
  unsigned short  ushort; 
5
  unsigned int  uint[0]; 
6
}; [c/]
7
8
uchar und uint variieren in ihrer Größe zwischen uchar[0] und uchar [20] - bei uint entsprechend. 
9
10
[c]#include <stdlib.h>
11
void *malloc(size_t size);

malloc ist nicht möglich, oder... weil malloc ja auf dem Heap und nicht 
im Stack (wo sich die Variablen befinden) arbeitet.

Gibt es trotzdem eine Alternative zu der Möglichkeit, die Arrays mit 
uint[20] und uchar[20] zu definieren?

Bernd

von schnudl (Gast)


Lesenswert?

und wieso geht das nicht mit malloc?
dafür ist es doch da!

von Karl H. (kbuchegg)


Lesenswert?

Bernd Schuster wrote:

> Gibt es trotzdem eine Alternative zu der Möglichkeit, die Arrays mit
> uint[20] und uchar[20] zu definieren?

Nein.
Entweder du kennst die Größe zur Compilezeit, dann schreib sie
direkt hin.
Oder du kennst sie nicht, dann musst du mit malloc den benötigten
Speicher reservieren.

Eine Alternative gibt es: Man definiert die Variablen zur Compilezeit
in der maximal zulässigen Größe und verwendet dann einen Teil
ganz einfach nicht. Bei 20 uint würde ich das so machen.

von Willi W. (williwacker)


Lesenswert?

Es muss aber nicht so sein, dass sich die Variablen auf dem Stack 
befinden. Das tun sie nur, wenn Du die Variablen lokal anlegst,also:

void tralala (void)
{
  int i;
  ...
  return;
}

i steht auf dem Stack.

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
Noch kein Account? Hier anmelden.