2010-12-12 6 views
3

Jetzt auf meinem System (debianx64) ist die Seitengröße 4096 Bytes. Gibt es eine Möglichkeit, es zu verringern? Ich möchte gerne viele kleine Stücke im Speicher ablegen, aber selbst für 1 Byte reserviert kann ich keine anderen 4095 wegen der Sache verwenden, die hier in der ersten Nachricht hinzugefügt wurde. Ist es wahr oder liege ich falsch? Ist es möglich, es zu tun? Thx für Antworten.C++ Größe der Speicherseite von 4096 Bytes reduzieren

+1

Duplizieren von http://stackoverflow.com/questions/4420891/c-new-new-how-is-it-allocating-memory. – Nate

Antwort

10

Nr

4096 ist die kleinste von der x86-Plattform zur Verfügung gestellt Seitengröße. Dies ist eine Beschränkung, die von der CPU auferlegt wird. Es bietet größere Größen (bis zu 4 MB, je nach Modus), aber das wird normalerweise vom Betriebssystem beim Booten ausgewählt.

Was Sie können Do ist eine relativ große Zuordnung als Backing-Store für eine object pool machen. Wenn Sie dann viele kleine Objekte benötigen, können Sie alle innerhalb einer einzelnen Seite oder Speicherregion gespeichert werden. Dies ist ein übliches Idiom zur Verbesserung der Leistung bei Speicherzuweisungen.

Darüber hinaus funktionieren die meisten vernünftigen Speicherzuordner auf diese Weise sowieso, also ist es nicht notwendig, einen Objektpool zu implementieren, es sei denn, Sie finden in Profiling, dass Sie es benötigen.

1

Seitengröße ist ein OS-weites Element. Sie können nicht nur eine neue Seitengröße für Ihre Anwendung erstellen, da die Seitenfehlerlogik mit allen anderen Prozessen zusammenarbeiten muss.

Ich bin mir nicht sicher, was genau Sie versuchen zu tun. Ich werde sagen, dass, wenn Sie sich sogar Sorgen um dieses Problem machen, Sie Ihre Software cachefreundlicher machen müssen, indem Sie Speicher wie in einem Array speichern und nacheinander darauf zugreifen.

1

Seitengröße (die BTW kann nicht unter 4K auf x86-Plattformen gesenkt werden) ist höchstwahrscheinlich irrelevant für Ihre Situation. Wenn Sie Daten auf dem Heap zuweisen, wird die Frage der Seitengröße nicht in der Art und Weise auftreten, die Sie annehmen.