2009-04-23 2 views
0

Ich frage mich, ob es einen Cross-Plattform-Allokator, der einen Schritt niedriger als malloc/free ist.Cross-Plattform-Speicherzuweiser sbrk/virtualalloc

Zum Beispiel möchte ich etwas, das würde einfach sbrk in Linux und VirtualAlloc in Windows aufrufen (Es könnte zwei weitere ähnliche syscalls, aber es ist nur ein Beispiel).

+0

Ich frage mich, was würde es tun, wenn ein solcher Allokator existiert? – lothar

+0

Sie können Ihr eigenes malloc/free implementieren, ohne sich Gedanken über das zugrunde liegende Betriebssystem machen zu müssen. – Unknown

+0

Klingt für mich wie das komplette Gegenteil. malloc/free ist eine Standardschnittstelle für Betriebssysteme (über die C-Bibliothek) und Ihre benötigt für jedes Betriebssystem unterschiedliche Betriebssystemaufrufe. – lothar

Antwort

2

bin ich mit den betreffenden Funktionen nicht vertraut, aber:

#if defined (__WIN32__) 
    #define F(X) VirtualAlloc(X) 
#elif defined (__LINUX__) /* or whatever linux's define is */ 
    #define F(X) sbrk(X) 
#endif 

nicht sicher, ob die Syntax 100% ist (ich bin neu in Makros & c), aber die allgemeine Idee funktionieren sollte.

+0

Nun weiß ich, wie definiert, aber virtualalloc und sbrk sind nicht 100% äquivalente Funktionen . – Unknown

+1

mmap() für anonymen Speicher möglicherweise mehr wie VirtualAlloc – nos

0

C gibt Ihnen malloc und free, C++ fügt new, new[], delete und delete[] und die Platzierungsformen zusätzlich zu dem, was C zur Verfügung stellt.

Alles andere und Sie sind nicht mehr im Bereich der Sprache. Sie treten entweder in OS-Land oder in Assembler murking. Es ist keine Frage, dass solche Dinge plattformübergreifend sind.

Ich frage mich, was würde es tun, wenn ein solcher Zuordner vorhanden wäre?

Sie könnten Ihre eigenen malloc/free, ohne sich Gedanken über das zugrunde liegende Betriebssystem

Und würden Sie wollen eine andere Cross-Plattform-Lösung zu implementieren diese und andere implementieren ... Sie erhalten den Punkt. Dies ist kein praktikables Schema.

+0

Eigentlich sind malloc und sbrk/virtualalloc konzeptionell unterschiedlich. Malloc kommt normalerweise mit Overhead wie Größe Headern usw. Ich sehe keinen Grund, warum jemand nicht eine Version erstellen könnte, die eine einzige resizierbare globale Platte des Speichers zuweist – Unknown