Местонахождение ссылки. Поскольку данные хранятся по строкам, для каждой строки столбцы j находятся в соседних адресах памяти. ОС обычно загружает всю страницу из памяти в кэш, и ссылки на соседние адреса, вероятно, ссылаются на эту же страницу. Если вы увеличиваете на индекс строки во внутреннем цикле, возможно, что эти строки будут на разных страницах (так как они разделены j, удваивается каждая), и кэшу, возможно, придется постоянно вводить и выбрасывать страницы памяти, на которые он ссылается данные. Это называется избиением и ухудшает производительность.
На практике и при использовании более крупных современных кэшей размеры строк / столбцов должны быть достаточно большими, прежде чем это вступит в игру, но это все же хорошая практика.
[РЕДАКТИРОВАТЬ] Ответ выше специфичен для C и может отличаться для других языков. Единственное, что я знаю, отличается от Фортрана. FORTRAN хранит вещи в главном порядке столбца (выше - основной ряд), и было бы правильно изменить порядок операторов в FORTRAN. Если вы хотите / нуждаетесь в эффективности, важно знать, как ваш язык реализует хранение данных.