Ort der Referenz. Da die Daten in Zeilen gespeichert sind, befinden sich die Spalten j für jede Zeile in benachbarten Speicheradressen. Das Betriebssystem lädt typischerweise eine ganze Seite aus dem Speicher in den Cache, und benachbarte Adressreferenzen beziehen sich wahrscheinlich auf dieselbe Seite. Wenn Sie um den Zeilenindex in der inneren Schleife inkrementieren, ist es möglich, dass sich diese Zeilen auf verschiedenen Seiten befinden (da sie jeweils durch j doubles getrennt sind), und der Cache muss ständig Seiten von Speicher heranholen und wegwerfen die Daten. Dies wird als Thrashing bezeichnet und ist schlecht für die Leistung.
In der Praxis und mit größeren, modernen Caches, die Größen der Zeilen/Spalten müssten relativ groß sein, bevor dies ins Spiel kommen würde, aber es ist immer noch gute Praxis.
[EDIT] Die obige Antwort ist spezifisch für C und kann für andere Sprachen abweichen. Der einzige, den ich kenne, ist FORTRAN. FORTRAN speichert die Dinge in der Reihenfolge der Spalten (die obige Zeile ist größer) und es wäre richtig, die Reihenfolge der Anweisungen in FORTRAN zu ändern. Wenn Sie Effizienz benötigen/brauchen, ist es wichtig zu wissen, wie Ihre Sprache den Datenspeicher implementiert.
Dies ist die dritte grundlegende Frage, die ich in den letzten Tagen von Ihnen bekommen habe. Wenn Sie Schwierigkeiten haben, sollten Sie einen Tutor engagieren. – tvanfosson
hey, Mann! das sind keine Hausaufgaben ... Ich bin in der Klasse darauf gestoßen! Weil der Lehrer auf Chinesisch sprach, verstand ich nicht wirklich, worüber er sprach. Deshalb möchte ich Sie alle fragen ... – israkir
Wenn es jedoch Hausaufgaben ist, kann ich "Heimarbeit" -Tag selbst setzen; genau wie ich es für einige meiner letzten Fragen vor ... – israkir