Я читаю книгу об операционных системах, и она дает несколько примеров на C, которые я в основном понимаю.Пример, который я сейчас рассматриваю, показывает два почти идентичных фрагмента кода, которые будут выполняться в фиктивной системе ...
int i, j;
int [128] [128] data;
for (j = 0; j < 128; j++)
for (i = 0; i < 128; i++)
data [i] [j] = 0;
И второй фрагмент кода
int i, j;
int [128] [128] data;
for (i = 0; i < 128; i++)
for (j = 0; j < 128; j++)
data [i] [j] = 0;
Вкл.В этой конкретной системе первый раздел кода приведет к ошибкам в 16 тыс. страниц, а второй - только к 128.
Мои извинения, если это глупый вопрос, но в моем опыте с .NET я всегдабыли в основном не знают о памяти.Я просто создаю переменную, и она «где-то», но я не знаю, где и мне все равно.
Мой вопрос: как бы .NET сравнился с этими примерами C в этой вымышленной системе (страницыразмером 128 слов, каждая строка массива занимает одну полную страницу. В первом примере мы устанавливаем одно целое на странице 1, затем одно целое на странице 2 и т. д. .... в то время как второй пример устанавливает все целые числа на странице 1затем все целые на стр. 2 и т. д.)
Кроме того, хотя я думаю, что понимаю, почему код генерирует разные уровни подкачки, есть ли что-то значимое, что я могу с этим сделать?Разве размер страницы не зависит от операционной системы?Является ли это общим правилом доступа к памяти в массиве как можно более непрерывно?