Как кэш-память работает?

Вам просто нужно было изменить пробел #btnCategorias с margin на padding, чтобы пустое пространство вокруг элемента рассматривалось как часть элемента.

/*=============================================
HEADER
=============================================*/

$("#btnCategorias").click(function(){

	if(window.matchMedia("(max-width:767px)").matches){

		$("#btnCategorias").after($("#categorias").slideToggle("fast"));

	}else{

		$("#encabezado").after($("#categorias").slideToggle("fast"));

	}
		
})

/*=============================================
HEADER FIJO
=============================================*/

// When the user scrolls the page, execute myFunction 
window.onscroll = function() {myFunction()};

// Get the header
var header = document.getElementById("myHeader");

// Get the offset position of the navbar
var sticky = header.offsetTop;

// Add the sticky class to the header when you reach its scroll position. Remove "sticky" when you leave the scroll position
function myFunction() {
  if (window.pageYOffset > sticky) {
    header.classList.add("sticky");
  } else {
    header.classList.remove("sticky");
  }
}
/*=============================================
HEADER
=============================================*/

header {

	background-color: #FFFFFF;
	z-index: 1000;
}

header #btnCategorias{
	padding:20px 0;
	cursor: pointer;
}

header #btnCategorias p{
	line-height:46px;
	margin-bottom:0px;
	font-size: 20px;
}

header #categorias{
	display:none;
	margin-top:-10px;
	position: relative;
	padding-bottom:20px;
}

header #categorias h4{
	margin-top:20px;
	margin-bottom:-10px;
}

header #categorias hr{
	border:1px solid rgba(255,255,255,.3);
}

/*=============================================
STICKY HEADER 
=============================================*/

.sticky {

	-webkit-box-shadow: 0 6px 6px -6px #222;
  	-moz-box-shadow: 0 6px 6px -6px #222;
  	box-shadow: 0 6px 6px -6px #222;
	position: fixed;
	top: 0px;
	width: 100%;

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="content1"> 
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
</div>

<header class="container-fluid" id="myHeader">
	
	<div class="container">
		
		<div class="row" id="encabezado">
					
				<!--=====================================
				CATEGORIES BUTTON
				======================================-->

				<div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 backColor" id="btnCategorias">
					
					<p><strong>CATEGORÍAS
					
						<span class="pull-right">
							<i class="fa fa-bars" aria-hidden="true"></i>
						</span>
					</strong>
					</p>

				</div>

		<!--=====================================
		CATEGORIES
		======================================-->

		<div class="col-xs-12 backColor" id="categorias">
			
			<div class="col-lg-2 col-md-3 col-sm-4 col-xs-12">
				
				<h4>
					<a href="#" class="pixelCategorias">Lorem Ipsum</a>
				</h4>
				
				<hr>

				<ul>
					
					<li><a href="#" class="pixelSubCategorias">Lorem Ipsum</a></li>
					<li><a href="#" class="pixelSubCategorias">Lorem Ipsum</a></li>
					<li><a href="#" class="pixelSubCategorias">Lorem Ipsum</a></li>
					<li><a href="#" class="pixelSubCategorias">Lorem Ipsum</a></li>
					<li><a href="#" class="pixelSubCategorias">Lorem Ipsum</a></li>
								
				</ul>

			</div>		

		</div>

	</div>

</header>

<div id="content2">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
    
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
    
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
    
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
    
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
    
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation
    ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
    aute irure dolor in reprehenderit in voluptate velit esse
    cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
    cupidatat non proident, sunt in culpa qui officia deserunt
    mollit anim id est laborum.</p>
</div>

9
задан Deleted User 1 July 2014 в 17:38
поделиться

5 ответов

Местность ссылки. Поскольку данные хранятся строками для каждой строки, j столбцы находятся в смежных адресах памяти. ОС будет обычно загружать всю страницу из памяти в кэш, и смежные адресные ссылки будут, вероятно, относиться к той же самой странице. Если Вы увеличиваете индексом строки во внутреннем цикле, возможно, что эти строки будут на различных страницах (так как они разделяются j, удваивает каждого), и кэшу, вероятно, придется постоянно вводить и выбрасывать страницы памяти, поскольку он ссылается на данные. Это называют, перегружаясь и плохо для производительности.

На практике и с большими, современными кэшами, размеры строк/столбцы должны были бы быть довольно большими, прежде чем это сыграет роль, но это - все еще хорошая практика.

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

9
ответ дан 4 December 2019 в 07:15
поделиться

В C n-мерные матрицы являются крупнейшей строкой, означая, что последний индекс в матрицу представляет смежные пробелы в памяти. Это отличается, чем некоторые другие языки, ФОРТРАН, например, которые являются главным столбцом. В ФОРТРАНЕ более эффективно выполнить итерации через 2D матрицу как это:

do jj = 1,N
  do ii = 1,M
    x(ii,jj) = x(ii,jj) + K;
  enddo
enddo
2
ответ дан 4 December 2019 в 07:15
поделиться

Существует очень хорошая статья Ulrich Drepper из Red Hat и glibc известности, Что Каждый Программист Должен Знать О Памяти. Один раздел обсудил кэши в мельчайших подробностях. Например, существуют эффекты кэша в системах SMP, где центральные процессоры могут закончить тем, что перегрузили владение измененной строки кэша назад и вперед, значительно вредя производительности.

12
ответ дан 4 December 2019 в 07:15
поделиться

Это похоже на это becauses кэши как местность. То же количество памяти получило доступ, но расположило с интервалами далее независимо, поразит различные "строки" кэша или могло бы даже пропустить кэш в целом. Это поэтому хорошо, каждый раз, когда у Вас есть выбор, для организации данных так, чтобы доступы, которые, вероятно, произойдут друг близко к другу вовремя, также сделали так в пространстве. Это увеличивает шанс удачного обращения в кэш и дает Вам больше производительности.

Существует, конечно, богатство информации об этой доступной теме, см. instancethis статью в Википедии о местности ссылки. Или, я предполагаю, Ваш собственный учебник курса.:)

7
ответ дан 4 December 2019 в 07:15
поделиться

Кэш-память является очень быстрой и очень дорогой памятью, которая находится близко к ЦП. Вместо того, чтобы выбирать одну маленькую часть данных из RAM каждый раз, ЦП выбирает блок данных и хранит его в кэше. Ставка - то, что, если Вы просто читаете один байт, затем следующий байт, Вы читаете, вероятно, будет правильным после него. Если это верно, затем это может прибыть из кэша.

Путем разметки цикла, поскольку у Вас есть он, Вы читаете байты в порядке, что они хранятся в памяти. Это означает, что они находятся в кэше и могут быть считаны очень быстро ЦП. Если Вы подкачали вокруг строк 1 и 2, то Вы читали каждый "N" байты каждый раз вокруг цикла. Байты, которые Вы читаете, больше не последовательны в памяти, и таким образом, они не могут быть в кэше. ЦП должен выбрать их от (более медленной) RAM, и таким образом, Ваши снижения производительности.

1
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: