<?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>Блоги &#187; vladimirkovalenko</title>
	<atom:link href="http://software.intel.com/ru-ru/blogs/author/vladimirkovalenko/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/ru-ru/blogs</link>
	<description></description>
	<lastBuildDate>Thu, 24 May 2012 12:16:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Измерение потребления памяти</title>
		<link>http://software.intel.com/ru-ru/blogs/2011/11/15/2005690/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2011/11/15/2005690/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 14:28:56 +0000</pubDate>
		<dc:creator>vladimirkovalenko</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Разработка софта]]></category>
		<category><![CDATA[Acceler8]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2011/11/15/2005690/</guid>
		<description><![CDATA[Знание о том, сколько в программе выделяется памяти, и где это происходит - первый шаг в оптимизации использования памяти.
Для этих целей есть несколько программ, не требующих перекомпиляции или каких-либо изменений программы.]]></description>
			<content:encoded><![CDATA[<p>Знание о том, сколько в программе выделяется памяти, и где это происходит - первый шаг в оптимизации использования памяти.<br />
Для этих целей есть несколько программ, не требующих перекомпиляции или каких-либо изменений программы.</p>
<p>Первый инструмент называется massif. Он не пологается на отладочную информацию от компилятора, а следит за использованием памяти во время всей работы программы. На рис.1 показан пример сгенерированного вывода. Massif работает, используя возможности valgrind, запускается строкой вида </p>
<p><code>valgrind --tool=massif command arg</code></p>
<p>где command - запускаемая программа, arg - список ее аргументов.<br />
Valgrind будет симулировать работу программы, фиксируя все вывзовы функций выделения и высвобождения памяти, при этом записывая временные отметки. Итогом является график использования памяти за все время работы программы, создаются файлы massif.XXXXX.txt и massif.XXXXX.ps, где XXXXX - PID процесса. Пример такого файла .ps приведен на рисунке:</p>
<p><img src="http://img257.imageshack.us/img257/5004/ex0.png" alt="Рис. 1. Результат работы Massif" /><br />
Рис. 1. Результат работы Massif</p>
<p>Некоторые программы содержат собственные реализации функций выделения памяти, или оболочки над системными функциями. В первом случае выделения памяти будут пропущены, во втором - запись будет малоинформативной и содержать только адрес вызова. По этим причинам, полезно включить дополнительные функции к списку выделяющих память. Это можно сделать с помощью параметра --alloc-fn=xmalloc, который означает, что функция xmalloc также выделяет память.</p>
<p>Второй инструмент называется memusage, по сути - это упрощенная версия massif. Он существовал еще задолго до него и является частью GNU C library. Memusage записывает только полный размер используемой памяти в куче и, опционально, в стеке. Результаты выводятся в виде графика, который генерируется специальным скриптом, параметрами которого так же, как и в случае с valgrind, являются имя программы и ее аргументы:</p>
<p><code>memusage command arg</code></p>
<p>Посокольку код программы выполняется сам как отдельный процесс, а не симулируется (как в случае с valgrind), memusage работает во много раз быстрей, так что его можно использовать в тех ситуациях, когда massif был бы бесполезен. Кроме полного подсчета памяти, memusage выдает гистограмму размеров блоков, выделенных при работе программы.</p>
<p>Пример вывода:</p>
<p><img src="http://xmages.net/storage/10/1/0/7/2/upload/d82984a9.png" alt="Рис. 2. Результат работы memusage" /><br />
Рис. 2. Результат работы memusage</p>
<p>В заключении хочется отметить, что представленные инструменты не единственные для данной задачи, существуют еще множество других, более продвинутых утилит и библиотек для этоих целей (например, Electric Fence, GPT,...).</p>
<p>Источник Ulrich Drepper. What Every Programmer Should Know About Memory.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2011/11/15/2005690/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

