<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>przemkovv&#039;s world &#187; x86</title>
	<atom:link href="http://przemkovv.net/tag/x86/feed/" rel="self" type="application/rss+xml" />
	<link>http://przemkovv.net</link>
	<description>The future is now</description>
	<lastBuildDate>Sun, 09 Oct 2011 20:17:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Zarządzanie pamięcią pod Windowsem x64</title>
		<link>http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/</link>
		<comments>http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 23:15:38 +0000</pubDate>
		<dc:creator>Przemysław Walkowiak</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[pamięć]]></category>
		<category><![CDATA[Windows Server 2008]]></category>
		<category><![CDATA[x64]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://przemkovv.net/?p=66</guid>
		<description><![CDATA[Pracując przy projekcie, który bardzo mocno wykorzystuje obliczenia matematyczne, po raz pierwszy natknąłem się w praktyce na ograniczenia pamięciowe. W pierwszych wersjach systemu nie udało nam się tych ograniczeń zauważyć, gdyż operowaliśmy na małych próbkach danych rzędu 1000&#215;20. Oczywiście należało sprawdzić działanie także dla większej próbki danych i wyskoczyło nam pierwsze z ograniczeń. Początkowo prace [...]]]></description>
			<content:encoded><![CDATA[<p>Pracując przy projekcie, który bardzo mocno wykorzystuje obliczenia matematyczne, po raz pierwszy natknąłem się w praktyce na ograniczenia pamięciowe. W pierwszych wersjach systemu nie udało nam się tych ograniczeń zauważyć, gdyż operowaliśmy na małych próbkach danych rzędu 1000&#215;20. Oczywiście należało sprawdzić działanie także dla większej próbki danych i wyskoczyło nam pierwsze z ograniczeń.</p>
<p>Początkowo prace deweloperskie przeprowadzane były na maszynie z systemem 32bitowym z pamięcią 4GB. Występuje tutaj zjawisko ograniczenia pamięci dla procesu do 2GB (ewentualnie do 3GB z odpowiednim przełącznikiem). Przez jakiś czas wystarczał nam obecny limit&#8230; Ale po co się ograniczać skoro procesory są 64bitowe? Tak więc po przeinstalowaniu systemu na Windows Server 2008 x64 nastąpiła przedwczesna radość z praktycznie zerowymi limitami (nie mam do dyspozycji serwera z 2TB pamięci RAM <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).</p>
<p>Pierwszym problem przy uruchamianiu aplikacji pojawił się z bibliotekami matematycznymi Intel Math Kernel Library, były jeszcze 32bitowe, ale nie sprawiło dużo kłopotów przerobienie jej na wersję 64bitową (aczkolwiek trzeba było trochę doczytać;P ).</p>
<p>W końcu z wielką radością w oczach aplikacja została odpalona i można było patrzeć jak rośnie słupek zajętości pamięci przez proces, urósł do około 4GB. No dobra, ale jakie tutaj są ograniczenia? Okazuje się, że najbliższym limitem jest ciągł obszar jaki można zaalokować. Próba zdefiniowania tablicy typu Byte o liczbie elementów większej niż 2^31 zakończyła się porażką (mniejszą bądź równą &#8211; należy wziąć jeszcze narzut platformy .NET &#8211; jak najbardziej udało się zaalokować). Dlaczego akurat tablica może mieć rozmiar tylko 2GB? No cóż, wina leży po stronie platformy .NET i środowiska CLR.</p>
<p>Następny krokiem była próba zaalokowania kilku tablic po 2GB każda. Niestety po 6 takich wyświetlił mi się wyjątek OutOfMemoryException (patrz rysunek)</p>
<p style="text-align: center;"><a href="http://przemkovv.net/wp-content/uploads/2008/08/6_2gb1.jpg"><img class="size-medium wp-image-70 aligncenter" title="Alokacja sześciu macierzy po 2GB" src="http://przemkovv.net/wp-content/uploads/2008/08/6_2gb1-300x129.jpg" alt="" width="300" height="129" /></a></p>
<p>Przyczyną braku pamięci zapewne była wielkość pliku wymiany, gdyż odpowiedni licznik pokazywał ładną liczbę 15999MB (rysunek). Zajętość co prawda wyniosła 14484MB, ale kolejne 2GB tutaj już się nie mieszczą <img src='http://przemkovv.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p style="text-align: center;"><a href="http://przemkovv.net/wp-content/uploads/2008/08/16gb1.jpg"><img class="size-medium wp-image-71 aligncenter" title="Plik wymiany wielkości 16GB" src="http://przemkovv.net/wp-content/uploads/2008/08/16gb1-300x282.jpg" alt="" width="300" height="282" /></a></p>
<p style="text-align: center;">
<p>Ostatecznie muszę stwierdzić, że o ile limit 2GB na wielkość ciągłej pamięci do zaalokowania może boleć (należałoby się zagłębić bardziej w jaki sposób można to obejść), to obszar pamięci dla jednego procesu jest jak na razie nie do zapełnienia dla mnie pożytecznymi danymi, a zawsze można jeszcze zwiększyć rozmiar pliku wymiany.</p>
<p>Warto przeczytać:</p>
<ol>
<li> <a href="http://blogs.msdn.com/joshwil/archive/2005/08/10/450202.aspx">BigArray&lt;T&gt;, getting around the 2GB array size limit </a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/aa366778.aspx">Memory Limits for Windows Releases</a></li>
<li> <a href="http://www.microsoft.com/poland/technet/article/art0092_01.mspx">Zarządzanie pamięcią w 32 i 64-bitowych systemach Windows </a></li>
</ol><div class="bottomcontainerBox" style="border:1px solid #808080; border-radius:5px 5px 5px 5px; box-shadow:2px 2px 5px rgba(0,0,0,0.3);background-color:#F0F4F9;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fprzemkovv.net%2F2008%2F08%2F29%2Fzarzadzanie-pamiecia-pod-windowsem-x64%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:80px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/"></g:plusone>
			</div>
			<div style="float:left; width:95px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/"  data-text="Zarządzanie pamięcią pod Windowsem x64" data-count="horizontal" data-via="przemkovv">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://przemkovv.net/2008/08/29/zarzadzanie-pamiecia-pod-windowsem-x64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

