Aus einem anderen Blickwinkel als bei früheren Kommentatoren und Antworten besteht die Möglichkeit, dass Ihre Professoren Erfahrung mit Systemen haben, bei denen der Speicher statisch zugewiesen wurde (dh als das Programm kompiliert wurde).
Die statische Zuordnung erfolgt, wenn Sie Folgendes tun:
define MAX_SIZE 32
int array[MAX_SIZE];
In vielen Echtzeit- und eingebetteten Systemen (die am wahrscheinlichsten von EEs oder CEs angetroffen werden) ist es normalerweise vorzuziehen, die dynamische Speicherzuweisung insgesamt zu vermeiden. Also, Verwendungen von malloc
,new
und ihre Gegenstücke zum Löschen selten. Darüber hinaus ist der Speicher in Computern in den letzten Jahren explodiert.
Wenn Ihnen 512 MB zur Verfügung stehen und Sie statisch 1 MB zuweisen, müssen Sie ungefähr 511 MB durchlaufen, bevor Ihre Software explodiert (na ja, nicht genau ... aber gehen Sie hier mit mir). Angenommen, Sie haben 511 MB zu missbrauchen. Wenn Sie 4 Bytes pro Sekunde mallocieren, ohne sie freizugeben, können Sie fast 73 Stunden lang laufen, bevor Ihnen der Speicher ausgeht. Wenn man bedenkt, dass viele Computer einmal am Tag ausgeschaltet werden, bedeutet dies, dass Ihrem Programm niemals der Speicher ausgeht!
Im obigen Beispiel beträgt das Leck 4 Bytes pro Sekunde oder 240 Bytes / min. Stellen Sie sich nun vor, Sie senken das Byte / Min-Verhältnis. Je niedriger dieses Verhältnis, desto länger kann Ihr Programm problemlos ausgeführt werden. Wenn Ihre malloc
s selten sind, ist das eine echte Möglichkeit.
Wenn Sie wissen, dass Sie nur malloc
einmal zu etwas gehen und das malloc
nie wieder getroffen wird, ähnelt dies einer statischen Zuordnung, obwohl Sie nicht wissen müssen, wie groß das ist, was Sie zuweisen. Vorderseite. Beispiel: Nehmen wir an, wir haben wieder 512 MB. Wir müssenmalloc
32 Arrays von ganzen Zahlen. Dies sind typische Ganzzahlen - jeweils 4 Bytes. Wir wissen, dass die Größe dieser Arrays niemals 1024 Ganzzahlen überschreiten wird. In unserem Programm treten keine weiteren Speicherzuordnungen auf. Haben wir genug Speicher? 32 * 1024 * 4 = 131.072. 128 KB - also ja. Wir haben viel Platz. Wenn wir wissen, dass wir niemals mehr Speicher zuweisen werden, können wir dies sicher tunmalloc
diese Arrays, ohne sie zu befreien. Dies kann jedoch auch bedeuten, dass Sie den Computer neu starten müssen, wenn Ihr Programm abstürzt. Wenn Sie Ihr Programm 4.096 Mal starten / stoppen, weisen Sie alle 512 MB zu. Wenn Sie Zombie-Prozesse haben, ist es möglich, dass Speicher auch nach einem Absturz nie freigegeben wird.
Sparen Sie sich Schmerz und Elend und konsumieren Sie dieses Mantra als Die Eine Wahrheit: malloc
sollte immer mit einem assoziiert werden free
. new
sollte immer eine haben delete
.