Правильный тест должен гарантировать, что обрабатываются одни и те же данные, поэтому я убрал библиотечные генераторы случайных чисел и заменил их явной генерацией. Правильный тест должен проверять корректность результата, поэтому результат умножения теперь используется.
Каждый код прогонялся три раза в topcoder practice room 461 easy. Результаты и код можно посмотреть здесь: http://advgreat.narod.ru/matrices.rar
Если кто-то думает, что я что-то делаю не так -- код в студию.
Мои извинения любителям Java. В прошлый раз я забыл указать ключевое слово final, теперь добавил.
Для C# я попробовал замерить вариант, когда значение size не задается литералом, а берется из входных данных -- в таком случае у компилятора не будет шансов догадаться, что будет это такое при работе программы. Правда, влияние на скорость это оказывает только для С/С++.
Для C# и Java вывод такой:
если нужен двухмерный массив или его аналог, то индексация в
int[,] будет работать медленнее всего
int[][] будет работать немного быстрее
int[] с индексацией вида arr[y*cols + x] будет работать еще быстрее
Для C++, как и ожидалось, индексация в массиве массивов (int **) оказалась медленее, чем в двухмерном массиве (int [][]), никакого преимущества переход с адресации int[][] на развернутое int[] не дает.
Также хочу рассказать тем, кто не знает, что GCC поддерживает VLA. То есть там работает такой код:
int foo(int n) { int arr[n][n]; // все, массив готов и в него можно писать
p.s. Почему я писал этот пост
меня удивила фраза Федора в http://codeforces.me/blog/entry/254#comment-3033 про двухмерные массивы в C#
в результате прогона его кода выяснилось, что он прав, а я ошибался
я заинтересовался другими способами использования массива, а потом немного решил погонять и другие языки, заодно проверив фразу Петра о том, что Java медленнее C#
теперь решил сделать измерение корректным и выложить исходники
p.p.s.любители Java ухитрилось заминусовать даже мой коммент со ссылкой на бенчмарк, где Java быстрее C/C++. Очевидно, что Java коррелирует с биполярностью мышления и скудостью ума. Для вас еще есть замечательный пост о гибкой Java: http://codeforces.me/blog/entry/312