Ich habe gerade angefangen zu lesen Die Programmiersprache C von Brian Kernighan und Dennis Ritchie, und ich fand diese Aussage:
Die Sprache definiert keine andere Speicherzuweisungseinrichtung als die statische Definition und die Stapeldisziplin, die durch die lokalen Variablen von Funktionen bereitgestellt wird; es gibt keinen haufen oder Müllabfuhr.
Bedeutet dies also, dass es an der liegt malloc() Funktion, die eine Speicheradresse vom Heap zurückgibt, dass C Zugriff auf den Heap-Speicher hat? Und dann muss malloc in einer anderen Sprache geschrieben sein, höchstwahrscheinlich Assembler oder B?
Das mag ein dummer Zweifel sein, aber ich muss ihn ausräumen. Vielen Dank.
Wenn Sie von der “Sprache” sprechen, dann ja, aber C ist nicht nur die Sprache.
– Khaled Alshaya
21. August 2012 um 16:19 Uhr
Ich würde entweder die Dokumentation über die Beschreibung der hinterfragen malloc() Funktion oder das Buch selbst. Wenn ich raten müsste, was falsch ist, würde ich auf das Buch tippen. Ich kann Ihnen sagen, dass malloc() in derselben Sprache geschrieben ist wie alles andere.
– Sicherheitshund
21. August 2012 um 16:19 Uhr
malloc() ist Teil der C-Bibliothek, aber ich denke, was das Buch sagt, dass die Sprache keine Notwendigkeit für die Heap-Zuweisung angibt.
– Wo
21. August 2012 um 16:21 Uhr
der Schlüsselsatz hier ist die Sprache definiert nicht.
– pb2q
21. August 2012 um 16:21 Uhr
Beispielsweise definieren Java und C# im Gegensatz dazu einen Speicherbereich, in dem Objekte erstellt werden können. In C gibt es keinen solchen Ort. Der Ort, von dem malloc nimmt seine Erinnerung ist unbestimmt, und wie sich herausstellt, nennen wir es alle “der Haufen”.
– zneak
21. August 2012 um 16:22 Uhr
Ben Zotto
Das C Sprache selbst gibt nicht direkt für einen Heap an oder wie er funktionieren soll, stellt aber Zeiger usw. bereit.
malloc und seine Cousins sind Teil der sogenannten C-Standardbibliothek und sind Funktionen, die Sie mit jeder Standardimplementierung von C und solchen verknüpfen können tun bieten Zugriff auf Speicher, der nicht statisch oder auf dem Stack ist. Auf jeder Plattform kann die Art und Weise, wie diese Funktionen diesen Speicher tatsächlich abrufen und verwalten, unterschiedlich sein.
C ist eine althergebrachte Sprache und Bibliothek, und jetzt scheint alles aus einem Guss zu sein. Aber als K&R dieses Buch schrieb, war das nicht so offensichtlich, und diese Aussage ist eine Klarstellung dessen, was zur Syntax der Sprache selbst gehört (im Gegensatz zu dem, was normalerweise von den unterstützenden Bibliotheken bereitgestellt wird).
Ich denke, die Autoren sind sehr präzise, wenn sie sagen, dass sie von der “Sprache” sprechen. Wenn Sie über C sprechen, haben Sie die Sprache und die Standardbibliotheken. In der Sprache selbst gibt es keine dynamische Speicherzuweisungseinrichtung, aber die Standardbibliothek stellt diese Einrichtungen bereit.
In der Sprache ist kein Heap explizit definiert. Implementierungen verwenden es jedoch für dynamisch zugewiesenen Speicher.
Siehe diese Diskussion über verschiedene Arten der Zuweisung, einschließlich Heap:
malloc bekommt vom Kernel des Betriebssystems zugewiesenen Speicher. Alle Sprachen tun dies. Auf diese Weise stellt das Betriebssystem sicher, dass Programme über verfügbaren Speicherplatz verfügen, obwohl es sie nicht daran hindert oder möglicherweise nicht hindert, insbesondere diejenigen, die in C geschrieben sind, zu versuchen, Grenzen zu überschreiten.
13844600cookie-checkes gibt keinen haufen in c?yes
Wenn Sie von der “Sprache” sprechen, dann ja, aber C ist nicht nur die Sprache.
– Khaled Alshaya
21. August 2012 um 16:19 Uhr
Ich würde entweder die Dokumentation über die Beschreibung der hinterfragen
malloc()
Funktion oder das Buch selbst. Wenn ich raten müsste, was falsch ist, würde ich auf das Buch tippen. Ich kann Ihnen sagen, dass malloc() in derselben Sprache geschrieben ist wie alles andere.– Sicherheitshund
21. August 2012 um 16:19 Uhr
malloc()
ist Teil der C-Bibliothek, aber ich denke, was das Buch sagt, dass die Sprache keine Notwendigkeit für die Heap-Zuweisung angibt.– Wo
21. August 2012 um 16:21 Uhr
der Schlüsselsatz hier ist die Sprache definiert nicht.
– pb2q
21. August 2012 um 16:21 Uhr
Beispielsweise definieren Java und C# im Gegensatz dazu einen Speicherbereich, in dem Objekte erstellt werden können. In C gibt es keinen solchen Ort. Der Ort, von dem
malloc
nimmt seine Erinnerung ist unbestimmt, und wie sich herausstellt, nennen wir es alle “der Haufen”.– zneak
21. August 2012 um 16:22 Uhr