Wo wird physikalisch new und malloc gespeichert

Persönliche Seite #5890917
Lesenswert?
• ▲
▼
Bonzo N. schrieb:
> Malloc und New sind eigentlich daselbe. Nur ist bei New ein Typ
> implizit, waehrend bei Malloc nach Byte Groessen alloziert wird.

Wenn man das Frontend von new betrachtet.  Das "Backend" von new kann 
man selbt implementieren, in dem man operator new überlädt:
1
void* operator new (size_t);
2
void* operator new[] (size_t);

Dies geht auch innerhalb einer Klasse, so dass klassenlokal spezielle 
Aktionen erfolgen können (das static ist implizit).
1
class A
2
{
3
    static void* operator new (size_t s)
4
    {
5
        // Do some magic
6
        return ::operator new (s);
7
    }
8
};

Und für delete:
1
void operator delete (void*);
2
void operator delete[] (void*);
Moderator #5890929
Lesenswert?
• ▲
▼
Es ist zwar gängige Praxis, aber new muss nicht zwingend auf malloc
aufbauen, weswegen sich beide auch nicht zwingend aus demselben
Memory-Pool bedienen müssen. Die explizite Unterscheidung dieser Pools
in "Heap" und "Free Store" scheint auf Herb Sutter zurückzugehen:

  http://www.gotw.ca/gotw/009.htm

Um die eigentliche Frage zu beantworten: Physikalisch liegen natürlich
beide (wie auch Stack und Global/Static) im RAM.
Gast #5890941
Lesenswert?
• ▲
▼
Oh voreilig veröffentlicht.
Mir viel ein, dass nicht das Linkerscript allein verantwortlich ist, 
sondern die Implementierung von new daran natürlich einen noch größeren 
Anteil hat.
Und auch das Betriebssystem kann noch am wo herum pfuschen. Ebenso, wie 
die Hardware selbst. Durchaus denkbar ist, dass der Heap deines 
Programms den Cache des Prozessors niemals verlässt.
#5890959
Lesenswert?
• ▲
▼
"free store" ist eine Bezeichnung, die im C++-Standard verwendet wird 
für den Bereich, der für new verwendet wird. "heap" ist weder in C, noch 
in C++ ein offizieller Begriff für einen Speicherbereich. Diese 
Bezeichnung kommt eher aus den Implementierungen der Sprache. Der 
Bereich für malloc() hat in C keinen speziellen Namen, soweit ich weiß. 
Das Wort "heap" kommt im C-Standard nicht vor.
In der Praxis hängt es vom Compiler ab.
#5890965
Lesenswert?
• ▲
▼
nfet schrieb:
> Oh voreilig veröffentlicht.
> Mir viel ein, dass nicht das Linkerscript allein verantwortlich ist,
> sondern die Implementierung von new daran natürlich einen noch größeren
> Anteil hat.
> Und auch das Betriebssystem kann noch am wo herum pfuschen. Ebenso, wie
> die Hardware selbst. Durchaus denkbar ist, dass der Heap deines
> Programms den Cache des Prozessors niemals verlässt.

Ach wie schrecklich...

Auch malloc und der Stack sind genau so betroffen, das ist also keine 
Auszeichnung speziell für new.
Gast #5890979
Lesenswert?
• ▲
▼
nfet schrieb:
> Physikalisch liegen natürlich
>> beide (wie auch Stack und Global/Static) im RAM.
>
> Naja, also um genau zu sein, kann man das im Linkerscript einstellen.

Welchen Sinn sollte es denn haben, mit new reservierten Speicher im ROM 
anzusiedeln?

Georg
Beitrag #5899852 wurde von einem Moderator gelöscht.
#5900076
Lesenswert?
• ▲
▼
Ach Leute, wieso versteift ihr euch so auf die Idee, den Speicherbereich 
für malloc in den ROM zu legen, nur um dann zu postulieren, dass das 
unsinnig ist. Das ist sicherlich jedem hier klar.
Im Linkerskript ist einstellbar, wo im Adressraum verschiedene 
Speicherbereiche - darunter auch der/die für malloc und new liegen. Das 
hat erstmal überhaupt nichts damit zu tun, ob das nun ROM oder RAM ist. 
Damit wäre theoretisch auch möglich, das in den ROM zu legen, was aber 
in der Praxis natürlich keiner macht. Ein Tool wird nicht unsinnig, nur 
weil es theoretisch auch möglich wäre, damit unsinnige Dinge zu tun.

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