<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Slava Oks's WebLog : Coding &amp; Debugging tips</title><link>http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx</link><description>Tags: Coding &amp; Debugging tips</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Retrieving information about CPUs' relationships</title><link>http://blogs.msdn.com/slavao/archive/2006/03/12/550064.aspx</link><pubDate>Mon, 13 Mar 2006 00:52:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:550064</guid><dc:creator>slavao</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/slavao/comments/550064.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=550064</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=550064</wfw:comment><description>In order for server side applications to run efficiently on modern hardware they have to understand hardware layout. As we are moving towards multicore and multi node NUMA systems, understanding relationships amongst cores, logical and physical CPU has...(&lt;a href="http://blogs.msdn.com/slavao/archive/2006/03/12/550064.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=550064" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/slavao/attachment/550064.ashx" length="3561" type="text/plain" /><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category><category domain="http://blogs.msdn.com/slavao/archive/tags/SQLOS/default.aspx">SQLOS</category></item><item><title>Be aware: To Hyper or not to Hyper</title><link>http://blogs.msdn.com/slavao/archive/2005/11/12/492119.aspx</link><pubDate>Sat, 12 Nov 2005 20:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:492119</guid><dc:creator>slavao</dc:creator><slash:comments>35</slash:comments><comments>http://blogs.msdn.com/slavao/comments/492119.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=492119</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=492119</wfw:comment><description>Our customers observed very interesting behavior on high end Hyperthreading (HT) enabled hardware. They noticed that in some cases when high load is applied SQL Server CPU usage increases significantly but SQL Server performance degrades. Occasionally they would also see message in errorlog indicating one of the threads can't acquire a spinlock (Spinlock is a lightweight synchronization data structure. Threads keep a spinlock for short period of time. If a thread can't acquire a spinlock it will spin in a tight loop waiting for spinlock to become available). Customers also noticed that when HT is disabled under the same circumstances CPU usage increases slightly and performance is at appropriate level.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What is going on here? 
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;After some pondering and investigation we came up with the following theory.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Database server has different type of threads: worker threads, threads executing clients request, and system threads that performing system tasks. An example of a system thread is a lazywriter. The responsibility of the lazywriter is to lazily scan through database buffers and push least recently used buffers out of the cache.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Lazywriter usually kicks in whenever data page cache is full and server short of free data page buffers. The interesting behavior of lazywriter is that it scans large amount of memory. With Intel HT technogolgy logical processors share L1 &amp;amp; L2 caches. As you would guess lazywriter's behavior can potentially trash L1 &amp;amp; L2 caches. If a worker thread end up running on logical CPU that shares physical CPU with lazywriter its cache will be constantly trashed.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It means that most of the memory accesses for the worker thread will be L1 &amp;amp; L2 misses. Moreover whenever the worker attempts to access hot data structure protected by spinlock it potentially might have a less chance of acquiring the spinlock which will cause the worker's spinning. This behavior will translate to high CPU utilization and significant drop in performance.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;To confirm the theory I decided to create an experiment. I wrote a test program which consist of two types of threads: scan threads and lock threads. Scan threads are scanning through large amounts of memory. Lock threads&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;constantly attempt to acquire global lock.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If the theory is correct a lock thread that shares a physical CPU with a scan thread should acquire lock much less often than other threads in a given period of time. Below is the program's listing. (Disclosure: The program is for illustrative purpose only, it was written to illustrate the observed behavior, it shouldn't be treated as a final-well tested product :-))&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;windows.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;eh.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;wtypes.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;locale.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#include &amp;lt;process.h&amp;gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;extern "C" void _mm_pause(void);&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#pragma intrinsic (_mm_pause)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;inline void&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;SmtPause ()&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#if defined (_X86_) || defined (_AMD64_)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// PAUSE instruction (REP NOP) helps SMT scheduling&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;_mm_pause ();&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;#endif // _X86_&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Statistic information for threads&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;struct Statistics&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;int&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;locked;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;int&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;spinned;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;DWORD_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;affinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;};&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Type of threads the tests using&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;enum ThreadTypes&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;SCAN_THREAD,&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;LOCK_THREAD,&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;LAST_THREAD&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;};&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Entry Point&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;typedef void( __cdecl *ThreadEntryPoint )( void * );&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Inforamtion per thread - enables us to create threads in a common way&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;struct ThreadInfo&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;ThreadEntryPoint&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;func;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;LONG_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;affinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;};&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Global constants&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Number of CPUs&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;const int&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MaxNumberOfCPUs = 64;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Block of memory to scan by scan thread&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;char&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MemoryBlock [1024 *1024];&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Stat information: number of threads is limmited by number of CPU, &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// that is the purpose of the test&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;volatile Statistics&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Stats [MaxNumberOfCPUs];&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Number of threads running&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;volatile long&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;NumberOfThreadsRunning = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// "Spinlock" that all lock threads attempt to acquire&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;volatile long&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Lock = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//-----------------------------------------------------------------------------&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Function: scanThread&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Description:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Attempt to invalidate caches&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Notes:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1. Function changes 1MB of contiguous vm memory which appear&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;to be enought invalidate L1&amp;amp;L2 caches&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;void __cdecl &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;scanThread (void* param)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;char i = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;ULONG_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadAffinity =(DWORD_PTR) param;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;long&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadId = InterlockedIncrement (&amp;amp;NumberOfThreadsRunning) -1;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;SetThreadAffinityMask (GetCurrentThread (),threadAffinity);&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Initialize affinity&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;Stats [threadId].affinity = threadAffinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;while (i &amp;gt;= 0)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;// Memset memory: quick and dirty scan&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;memset (MemoryBlock, 0, sizeof (MemoryBlock));&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;Stats [threadId].spinned++;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;return;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;//-----------------------------------------------------------------------------&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Function: lockThread&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Description:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Acquires and releases a lock in a loop&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Notes:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;void __cdecl &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;lockThread (void* param)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ULONG_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadAffinity =(DWORD_PTR) param;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;long&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadId = InterlockedIncrement (&amp;amp;NumberOfThreadsRunning)-1;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;SetThreadAffinityMask (GetCurrentThread (), threadAffinity);&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Initialize affinity&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;Stats [threadId].affinity = threadAffinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;while (1)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;if (Lock == 0 &amp;amp;&amp;amp; InterlockedExchange (&amp;amp;Lock, 1) == 0)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Increment number of times we acquired lock&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;Stats [threadId].locked ++;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;Lock = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;else&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;{ &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;Stats [threadId].spinned++;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Be HT friendly&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;SmtPause ();&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;continue;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;return;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;//-----------------------------------------------------------------------------&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Function:main&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Description:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Creates lock and scan threads, reporting stats every 10sec&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;// Notes:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;//&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;int __cdecl &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;main (&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;int argc, &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;char* argv [])&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LONG_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadId = 0; &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;ThreadInfo&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadInfo [LAST_THREAD];&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;DWORD_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;processAffinity; &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;DWORD_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;threadAffinity; &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;DWORD_PTR&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;systemAffinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;int&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;counter = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;int&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;numberOfThreads = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Retrive process affinity&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;if (GetProcessAffinityMask (GetCurrentProcess (),&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;&amp;amp;processAffinity,&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;&amp;amp;systemAffinity) == FALSE)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf ("GetProcessAffinityMask failed - exiting\n");&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;exit (-1);&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Initialize threads Information: First default and then check &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// if client passed anything in&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Allocate all but one CPUs for threads running locking code&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;threadInfo [LOCK_THREAD].func = lockThread;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;threadInfo [LOCK_THREAD].affinity = processAffinity &amp;amp; processAffinity-1;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Allocate one CPU for scan thread&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;threadInfo [SCAN_THREAD].func = scanThread;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;threadInfo [SCAN_THREAD].affinity =threadInfo [LOCK_THREAD].affinity ^ processAffinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Read command line arguments: in simple way&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;for (counter = 0 ; counter&amp;lt; argc; counter++) &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;switch (*(argv [counter] + 1))&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;case 's':&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;case 'S':&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;// Retrieve affinity mask for scan threads&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;threadInfo [SCAN_THREAD].affinity = &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 6"&gt;(DWORD_PTR) _atoi64 ((argv [counter] + 2));&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;break;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;case 'l':&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;case 'L':&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;// Retrieve affinity mask for lock threads&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;threadInfo [LOCK_THREAD].affinity =&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 6"&gt;(DWORD_PTR) _atoi64 ((argv [counter] + 2));&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;break;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;case '?':&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;printf ("Usage: test -sn -lm \n"&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 6"&gt;"Example: test.exe -s8 -l7 (runs 1 scanning thread and 3 locking threads)\n"&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 6"&gt;"-sn is affinity of threads performing memory scan \n"&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 6"&gt;"-sm is affinity of threads acquiring lock");&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;exit (0);&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;default:&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;break;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Start threads of all types based on supplied affinities&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;for (counter = 0; counter &amp;lt; LAST_THREAD; counter++)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;while (threadInfo [counter].affinity != 0)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Separate affiinity for a thread we are trying to &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// create from all affinity mask&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: Verdana; mso-outline-level: 4"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Remember full mask&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;threadAffinity = threadInfo [counter].affinity;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: Verdana; mso-outline-level: 4"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Turn off least significant bit&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;threadInfo [counter].affinity &amp;amp;= threadInfo [counter].affinity -1;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: Verdana; mso-outline-level: 4"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Calculate the affinity bit for the thread: &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Leave one bit on - affinity bit&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;threadAffinity ^= threadInfo [counter].affinity; &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: Verdana; mso-outline-level: 4"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Use beginthread for simplicity&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;if (_beginthread (threadInfo [counter].func, &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;NULL, &lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;(void*) threadAffinity) == -1)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;printf ("Failed to create thread - exiting\n");&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;exit (-1);&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;numberOfThreads++;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;// Loop and report stats periodically&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;while (1)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;// Report every 10 sec&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;Sleep (10000);&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: Verdana; mso-outline-level: 3"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;for (threadId=0; threadId &amp;lt; numberOfThreads; threadId++)&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;{&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;printf ("Thread Id = %d\t, Thread Affinity = %p\t, Locked = %d\t, Spin = %d\t\n ",&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;threadId,&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;Stats [threadId].affinity,&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;Stats [threadId].locked,&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: 'Courier New'; mso-outline-level: 5"&gt;Stats [threadId].spinned);&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: Verdana; mso-outline-level: 5"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;// Reset run time data&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;//&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;Stats [threadId].locked = 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 4"&gt;Stats [threadId].spinned =0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 2in; FONT-FAMILY: Verdana; mso-outline-level: 5"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 1in; FONT-FAMILY: 'Courier New'; mso-outline-level: 3"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: 'Courier New'; mso-outline-level: 2"&gt;return 0;&lt;/P&gt;
&lt;P style="FONT-SIZE: 8pt; MARGIN: 0in; FONT-FAMILY: 'Courier New'; mso-outline-level: 1"&gt;}&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;As you can see one can specify an affinity for scan and lock threads at start up of the program.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;I ran sever experiments on my dev box which has 2 physical and 4 logical CPUs. CPU 1 (Affinity 0x1) &amp;amp; 3 (Affinity 0x4)&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;and 2 (Affinity 0x2) &amp;amp; 4 (Affinity 0x8) share physical CPUs respectively. The box also has Windows 2003 Server SP1 on it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Below are the results:&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;test.exe -s8 -l7 &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 0&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000008&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 0&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 9035&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 1&amp;nbsp; , Thread Affinity = 00000001&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 9290331&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 10373717&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 2&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000002&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 676397&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 40879794&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 3&amp;nbsp; , Thread Affinity = 00000004&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 10274030&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 42433521&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;test.exe -s4 -l11 &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 0&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000004&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 0&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 8943&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 1&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000001&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 741166&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 11421139&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 2&amp;nbsp; , Thread Affinity = 00000002&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 10747824&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 10024252&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 3&amp;nbsp; , Thread Affinity = 00000008&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 10210221&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 13988134&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;test.exe -s1 -l14 &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 0&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000001&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 0&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 8472&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 1&amp;nbsp; , Thread Affinity = 00000002&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 10550011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 20156206&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 2&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000004&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 722554&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 11211074&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 3&amp;nbsp; , Thread Affinity = 00000008&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 11182506&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 25376166&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;test.exe -s2 -l13 &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 0&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000002&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 0&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 8585&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 1&amp;nbsp; , Thread Affinity = 00000001&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 9900899&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 12267885&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 2&amp;nbsp; , Thread Affinity = 00000004&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 8984095&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 11909080&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Arial; mso-outline-level: 1"&gt;Thread Id = 3&amp;nbsp; , Thread Affinity = &lt;SPAN style="FONT-WEIGHT: bold"&gt;00000008&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Locked = 1297138&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , Spin = 28199769&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Great! The experiment confirms the theory. So does it mean you have to disable HT when using SQL Server? The answer is it really depends on the load and hardware you are using.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;You have to test your application with HT on and off under heavy loads to understand HT's implications. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Keep in mind that not only lazywriter thread can cause slowdown but any thread that performs large memory scan - for example a worker thread that scans large amount of data might be a culprit as well. &lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;For some customer applications when disabling HT we saw 10% increase in performance. So make sure that you do your home work before you decide to hyper on not to hyper :-)&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Hope this information was useful. Let me know if you have any questions!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=492119" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category><category domain="http://blogs.msdn.com/slavao/archive/tags/SQL+Server+Scheduling/default.aspx">SQL Server Scheduling</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Be+Aware/default.aspx">Be Aware</category></item><item><title>Be Aware: VirtualAlloc with MEM_RESERVE can fail even if you have plenty of VAS inside of the process</title><link>http://blogs.msdn.com/slavao/archive/2005/06/03/424905.aspx</link><pubDate>Fri, 03 Jun 2005 19:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:424905</guid><dc:creator>slavao</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/slavao/comments/424905.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=424905</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=424905</wfw:comment><description>&lt;P&gt;&amp;nbsp;Many developers assume that if you have plenty of free VAS in your process VirtualAlloc (&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualalloc.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualalloc.asp&lt;/A&gt;) and VirtualAllocEx (&lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualallocex.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/memory/base/virtualallocex.asp&lt;/A&gt;) calls with MEM_RESERVE parameter can't fail. This is not actually true.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;Remember that when allocating VAS region OS creates VAD (Virtual Address Descriptor). VAD manages VAS region, for more info read &lt;a href="http://blogs.msdn.com/slavao/archive/2005/01/27/361678.aspx"&gt;http://blogs.msdn.com/slavao/archive/2005/01/27/361678.aspx&lt;/A&gt;. When system is low on physical memory which includes RAM and swap file, VAD's allocation might fail. The failure will cause VirtualAlloc* call to fail. It means that if system low on physical memory VirtualAlloc* could fail. This becomes very important on 64 bit platforms. When running on 64 bit, developers might assume that reservation never fails - which is wrong.&lt;/P&gt;
&lt;P&gt;Hope it was useful. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=424905" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Memory+Management/default.aspx">Memory Management</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Be+Aware/default.aspx">Be Aware</category></item><item><title>Be Aware: IA64 Stack Size</title><link>http://blogs.msdn.com/slavao/archive/2005/03/19/399117.aspx</link><pubDate>Sat, 19 Mar 2005 20:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:399117</guid><dc:creator>slavao</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/slavao/comments/399117.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=399117</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=399117</wfw:comment><description>&lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Stack subject in Windows OS is fascinating. There are so many interesting technical problems surrounding it.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The moment you think you fully understand everything about stack you&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;suddenly discover yet another mystery.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;And so it goes. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;In the last couple of weeks I have been approached by our testers and support engineers asking about for how many threads they need to configure SQL Server on IA64 platform with 4GB of RAM.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;For example they asked is it ok to set number of threads to be 1024?&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;You probably know that SQL Server commits its stacks upfront.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;The reason we do it is to avoid unexplained server death - if there is no physical memory and machine is out of swap file, a process can disappear without leaving any traces. This will happen when a process will try to grow its stack.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;As any respectful server product SQL Server can't afford such&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;behavior. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;SQL Server on IA64 is configured to use 2MB of stack size. You can verify it by looking at SQL Server image header. Does it really consume that much of committed memory per thread? The answer is no. On IA64 there are two stacks - regular stack and backing store.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Backing store is a spill space for cpu register engine.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;It is used by cpu to spill registers to memory when it no longer has registers available.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;When a process specifies committed stack size to be 2MB, Windows commits 2MB for regular stack and 2MB for backing store. Consequently each thread will commit 4MB of RAM (If you only specify reservation Windows will reserve that much but not commit). Fig1 shows what the thread stack really looks like on IA64.&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;----------------------0x00000000000200000&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2MB&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stack&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/ \&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;&lt;span style="mso-spacerun: yes"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;----------------------0x00000000000400000&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2MB&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Backing store&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;&lt;span style="mso-spacerun: yes"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;&lt;span style="mso-spacerun: yes"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;\ /&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;|&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;----------------------0x00000000000600000&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.5in; FONT-FAMILY: Verdana; mso-outline-level: 2"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Fig 1. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;I would like to emphasize couple of interesting points. First Windows reserves a contiguous VAS region of size of 4MB for both stack and backing store. Second it divides this region in two so that the stack and the backing store grow in different directions. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Now we are in the position to answer the original question of how much physical memory 1024 threads will consume. The answer is 4MB*1024= 4GB. Considering that max server memory in SQL Server only reflects size of Buffer Pool and usually it is configured to be close to amount of physical memory on the box, this configuration might cause SQL server to crawl. This comes as a real surprise to many people.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Max amount of threads SQL needs to be configured for does depend on the type of application running on top of server but in this case it definitely needs to be below 1024. Even 512 number of threads could be too much.&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;This post will be incomplete if I didn't somehow mention stack overflow. Backing store makes IA64 stack handling to be different from other platforms. Stack overflow is not an exception in this case - OS needs to handle stack overflow both for regular stack and backing store. Surprise! For you it means that you have to be really careful when recovering from stack overflow especially when you diced to restore guard page by hand. But this is a whole different story on its own. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;I hope you learned something from this post. Comments are welcomed!&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Have a great weekend!&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=399117" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/slavao/archive/tags/SQL+Server+Memory+Management/default.aspx">SQL Server Memory Management</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Be+Aware/default.aspx">Be Aware</category></item><item><title>Be aware:  a new section in my blog</title><link>http://blogs.msdn.com/slavao/archive/2005/02/22/377837.aspx</link><pubDate>Tue, 22 Feb 2005 09:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:377837</guid><dc:creator>slavao</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/slavao/comments/377837.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=377837</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=377837</wfw:comment><description>Periodically, I bump into unusual behavior, features, of compiler, operating system, strange design and coding decisions made by someone else that makes me wonder. After giving it some thought, I often come to the conclusion that behavior or observed specifics are justifiable. However if I knew it upfront, It would have helped me to avoid unnecessary mistakes and complexity. &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Today I would like to open new section in my blog: Be Aware. In this section I would like to spend some time on this exact subject: strange behaviors and unexpected features. Sometimes these type of things are fascinating, sometimes just interesting and sometimes are just naïve.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;My goal is to point them out so that when you make your own decisions you will have more information to rely on.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;My goal is not to uncover bugs or start some kind of religious debates - I really don't like them. I strongly believe that problem drives a solution. What I mean by this is that something outrages in one place will be fully applicable in the other. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So let's begin :-).&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;The topic of variable's placement have been covered to full extend by now. Some developers prefer to declare all variables upfront some in the scope where variables get actually used. Personally, I have heard cons and pros for both sides and kind of agree with both. I think there is no black and white. In some cases you do have to declare a variable inside of the given scope. Recently I have observed interesting debugger's behavior while debugging dumps. As all of you know debugger usually has difficulties to show local variables for retail, optimized build.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;This is&amp;nbsp;kind of expected in many cases. Before you can rely on a value, you have to confirm that the value&amp;nbsp;is really correct. In windbg I usually use dv command to output local variables&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;gt; dv -V&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Using the command with -V lists the actual placement of the variable on the stack.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;What I noticed is that windbg wasn't displaying variables declared in local scopes at all even if instruction pointer was inside of the scope. It just doesn't list them! So I usually end up chasing those variables by disassembling the code and following stack manipulations. (Knowing original stack assignment in this cases would really helped) The process works 100% of the time, but I would have saved hours if the code declared variables in the beginning of the function.&amp;nbsp; At least&amp;nbsp;the debugger would&amp;nbsp;gave me a clue where the variable resides on the stack. &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Probably the point here is that avoiding unnecessary complexity could enable tools to do better job and make everyone life easier. Remember tools, as any software, well tested for the common case. So next time when declaring a variable in an internal scope just stop for a second and think: Is it really necessary?&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;I have more stories around complexity but I will keep them until next time :-). &lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt; &lt;p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=377837" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Be+Aware/default.aspx">Be Aware</category></item><item><title>Look at Memory Leaks - Classify and Identify</title><link>http://blogs.msdn.com/slavao/archive/2005/02/04/367113.aspx</link><pubDate>Fri, 04 Feb 2005 20:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:367113</guid><dc:creator>slavao</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/slavao/comments/367113.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=367113</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=367113</wfw:comment><description>&lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;In my previous post I talked about type of Memory Pressures. Today I would like to talk about related subject – Memory Leaks.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Before you continue reading please make sure that you are familiar with how memory is managed on Windows. &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Memory leaks are bugs that happen very often. I think it is very important to know how to approach the issue. Once you learned the process, these bugs are not as evil as everyone things.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;When leaks occur, the first thing developer needs to do is to classify them. How many times you have heard people are just saying the application failed or became unresponsive due to memory leak? A phrase memory leak could mean leak of several memory resources. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;Remember in my previous posts I talked about VAS, physical memory, page file and etc. An application can leak any of these resources. This means that memory leak is incomplete phrase that doesn’t have much meaning. One needs to be very specific when referring to a leak.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Leak Classification is very important. The table below represents memory leak type and tools that could be used to classify them. Keep in mind that there could be more tools and more leak types. I just enumerated the most common types that I dealt with in the past. &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 7.2in; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" width="691" border="1"&gt; &lt;tbody&gt; &lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Memory Resource/Tool&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 57.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="77"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Task Manager&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 109.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="146"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;PerfMon&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 54.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="72"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;WinDbg&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;WinDbg – Local Kernel Debugger&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 64.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="86"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;VADUMP&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 82.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="110"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;SQL Server&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 1"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;VAS &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 57.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="77"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 109.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="146"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Process/Virtual Bytes&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 54.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="72"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!vadump&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!heap&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!vad&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 64.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="86"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 82.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="110"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 2"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Physical Memory&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 57.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="77"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Virtual Memory&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 109.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="146"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Process/Private Bytes&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 54.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="72"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!vadump&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!heap&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!memusage&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!vm&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 64.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="86"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 82.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="110"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 3"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Page File&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 57.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="77"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Commit Charge&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 109.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="146"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Memory/Committed Bytes&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 54.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="72"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!memusage&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!vm&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 64.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="86"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;X&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 82.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="110"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 4"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;AWE &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 57.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="77"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 109.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="146"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 54.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="72"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 64.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="86"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 82.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="110"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Buffer Manager/Total pages&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 5; mso-yfti-lastrow: yes"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Handle&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 57.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="77"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Handles&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 109.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="146"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Objects&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 54.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="72"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!handle&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!handle&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 64.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="86"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 82.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="110"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Once leak is classified, it needs to be identified. Identification of a leak involves a tracking of leaking stack. Once stack is known leak is identified. Keep in mind in many cases it is not sufficient to identify file line and number.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Below table represents tools that could be used to identify a leak: &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; WIDTH: 407.45pt; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0in 5.4pt 0in 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" width="543" border="1"&gt; &lt;tbody&gt; &lt;tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Memory Resource/Tool&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 92.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="124"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;umdh/pageheap&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 87.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="116"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;LeakDiag&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 76.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="102"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;WinDbg&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;WinDbg – Local Kernel Debugger&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 1"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;VAS &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 92.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="124"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 87.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="116"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Virtual Allocator&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 76.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="102"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!heap -l&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 2"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Physical Memory / Page File&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 92.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="124"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Windows Heaps&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 87.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="116"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Windows Heaps&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;CRT Heap&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;COM Heap&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;MDAC Heap&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 76.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="102"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!vadump&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!heap&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!memusage&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 3"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;AWE &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 92.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="124"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 87.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="116"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 76.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="102"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 4; mso-yfti-lastrow: yes"&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: windowtext 1pt solid; WIDTH: 84.8pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="113"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;b style="mso-bidi-font-weight: normal"&gt;Handle&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 92.85pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="124"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 87.2pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="116"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 76.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="102"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Break points on CreateEvent,&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;CreateMutex,&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;…&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;CloseHandle&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #ffffff; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #ffffff; WIDTH: 66.15pt; PADDING-TOP: 0in; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="88"&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;!htrace&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Usually classifying a leak is not hard and should be done very fast. You should be able to teach your testers, QA personal, to do it. Moreover the&amp;nbsp;classsification&amp;nbsp;process could be automated. Identifying a leak is usually harder and more time consuming process. It might involve multiple restarts, use of different tools and etc... Knowing how a tool works and being comfortable with it is the key. Getting there does require experience.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;Once you are there, dealing with memory leaks becomes easier process. The only problem is that there will be always a leak that your tools can’t handle&lt;span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;. &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;This is the case when you sit down and write your own LeakDiag.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;There are several commercially available tools enabling you to classify and identify leaks. I haven’t looked at them for long time but from my past experience they don’t work as well as the ones I outlined in here. Before you decide to buy one make sure you understand how the tool works. If tool is capable of handling leaks only at process shutdown, it has very low value. Moreover, If you work on high-end server and have your own memory manager, most of those tools are not applicable.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;I will be glad to hear your comments.&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Enjoy weekend!&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=367113" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category><category domain="http://blogs.msdn.com/slavao/archive/tags/Memory+Management/default.aspx">Memory Management</category></item><item><title>Getting an exception call stack from the catch block (C++)</title><link>http://blogs.msdn.com/slavao/archive/2005/01/30/363428.aspx</link><pubDate>Sun, 30 Jan 2005 23:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:363428</guid><dc:creator>slavao</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/slavao/comments/363428.aspx</comments><wfw:commentRss>http://blogs.msdn.com/slavao/commentrss.aspx?PostID=363428</wfw:commentRss><wfw:comment>http://blogs.msdn.com/slavao/rsscomments.aspx?PostID=363428</wfw:comment><description>&lt;p&gt;&lt;span style="BACKGROUND: silver"&gt;This is my first post in this category so I am really looking forward to your comments :-)&amp;nbsp; Today I would like to cover a specific feature&amp;nbsp;related to our implementation of C++ exception handling. Every day I realize that not many people are familiar with this feature. When they learn about it they really get surprised :-). You need to see their reaction, it is just awesome! So now let’s see yours :-).&lt;/span&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p&gt;Have you&amp;nbsp;ever had a day when you are starring at catch block and willing you knew the stack of original exception? Do you remember how frustrated you were :-)? Well it turns out that the original stack is there under your fingertips. The debugger just hides it . Did I get you going &lt;span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;?&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p&gt;MS implementation of C++ exception handling doesn't actually pop the stack until the flow control leaves catch block.&amp;nbsp; From C++ standard &lt;em&gt;"A throw-expression initializes a temporary object, the type of which is determined by removing any top-level cv-qualifiers from the static type..."&amp;nbsp;&lt;/em&gt;It means that&lt;em&gt;&amp;nbsp;&lt;/em&gt;CRT needs to a make copy of an object somewhere when exception is thrown. As you can guess, it makes a copy of it&amp;nbsp;on the stack! It means that by default run time can't pop the stack until exception is dismissed. This feels good &lt;span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p&gt;Here is what actually happens on x86 platform when exception gets thrown. This is oversimplified view but you will get an idea:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Copy of the object is created on the stack&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Appropriate handler, catch block,&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;is found&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Runtime calls object destructors located on the stack&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;EBP is adjusted to a frame containing the catch block&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ESP is NOT TOUCHED&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Flow of control transferred to catch block&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;When done with a catch block the flow of control returns back to the place where it came before entering catch block&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ESP is adjusted &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; tab-stops: list .5in"&gt;-&lt;span style="FONT-SIZE: 7pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Flow of control is transferred outside of catch block&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p&gt;Amazing right! Now since EBP gets adjusted before getting to the catch block debugger doesn’t show the real stack. It shows you stack as you would expect: without exception on the stack!&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p&gt;Lets take a look at the example:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;int __cdecl main (int argc, char* rgArg [])&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;BYTE byte = 10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;throw (10);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;catch (int exception)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;BYTE* pStack;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;__asm&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mov pStack, esp;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;printf ("Stack difference %d\n",&amp;amp;byte - pStack);&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// To see real flow control we need to put some code &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// here&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;//&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;printf (“I am almost done\n”);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;} &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Output:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;i style="mso-bidi-font-style: normal"&gt;Stack difference 1595&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Wow! Now let’s take a look at the stack. I put a break point in the debugger on the first printf statement:&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;000aff84 01001469 00000001 002d5cc0 002d3b30 test!main+0x44&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;000affc0 77e4f38c 00000000 00000000 7ffdf000 test!mainCRTStartup+0xb0&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;000afff0 00000000 010013b9 00000000 78746341 kernel32!BaseProcessStart+0x23&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;This is what you would expect right? Now let’s take a look at registers&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;0:000&amp;gt; r&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;eax=01001331 ebx=01001331 ecx=00000100 edx=00000002 esi=000afbc8 edi=000aff78&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;eip=01001334 &lt;b style="mso-bidi-font-weight: normal"&gt;esp=000af938&lt;/b&gt; &lt;b style="mso-bidi-font-weight: normal"&gt;ebp=000aff84&lt;/b&gt; iopl=0&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nv up ei pl nz ac po nc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;cs=001b&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;ss=0023&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;ds=0023&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;es=0023&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;fs=003b&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;gs=0000&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;efl=00000216&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;test!main+0x44:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;01001334 8d4def&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;lea&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ecx,[ebp-0x11]&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ss:0023:000aff73=0aff580a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Please notice a big difference between ebp and esp! The real question now is how to get the real stack. The simple way is to make a search for &lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;0001003f&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt; pattern. As many of you know this is usually how the first four bytes of CONTEXT look like on x86 platform &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;0:000&amp;gt; s -d @esp @ebp 0001003f &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000afbe8&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;0001003f 00000000 00000000 00000000&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;?...............&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;All we have to do know is to switch context:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;0:000&amp;gt; .cxr 000afbe8&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;eax=000afeb8 ebx=7ffdf000 ecx=00000000 edx=002d3b30 esi=000aff48 edi=000aff48&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;eip=77e649d3 esp=000afeb4 ebp=000aff08 iopl=0&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;nv up ei pl nz na po nc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;cs=001b&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;ss=0023&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;ds=0023&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;es=0023&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;fs=003b&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;gs=0000&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;efl=00000206&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;kernel32!RaiseException+0x51:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;77e649d3 5e&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;pop&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;esi&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;000aff08 7c3929f8 e06d7363 00000001 00000003 kernel32!RaiseException+0x51&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;000aff48 01001331 000aff68 010018d4 00000000 MSVCR80!_CxxThrowException+0x34&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;000aff84 01001469 00000001 002d5cc0 002d3b30 test!main+0x41&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;000affc0 77e4f38c 00000000 00000000 7ffdf000 test!mainCRTStartup+0xb0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;000afff0 00000000 010013b9 00000000 78746341 kernel32!BaseProcessStart+0x23&lt;span style="BACKGROUND: silver; mso-highlight: silver"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;And here you go &lt;span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;. Also we could have used dps command to find a previous frame.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;0:000&amp;gt; dps @esp&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af938&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;7c392a47 MSVCR80!_NLG_Return &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af93c&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000aff78&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af940&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000afbc8&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af944 &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;000af954&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af948&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000aff78&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af94c&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;01001331 test!main+0x41 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af950&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000aff84&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af954&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000af980&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af958&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;7c3929b5 MSVCR80!_CallCatchBlock2+0x4a &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af95c&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;01001331 &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af960&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000aff78&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af964&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;00000100&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af968&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;000af9d4&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;Now all we need to do is reset ebp to &lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;000af954&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; BACKGROUND: silver; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-highlight: silver"&gt;0:000&amp;gt; r ebp=000af954&lt;/span&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: Courier; mso-bidi-font-family: Courier"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000af954 7c3929b5 01001331 000aff78 00000100 test!main+0x44&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000af980 7c391bc4 000aff78 01001918 01001331 MSVCR80!_CallCatchBlock2+0x4a&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000af9e4 7c392081 000afbc8 000aff78 00000001 MSVCR80!CallCatchBlock+0x84&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afa14 7c3923dd 000afbc8 000afbe8 000afba0 MSVCR80!CatchIt+0x5c&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afa70 7c3925c6 000afbc8 000aff78 000afbe8 MSVCR80!FindHandler+0x26e&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afaa4 7c392680 000afbc8 000aff78 MSVCR80!__InternalCxxFrameHandler+0xc5&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afae0 77f68cf6 000afbc8 000aff78 000afbe8 MSVCR80!__CxxFrameHandler3+0x26&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afae0 77f68cf6 000afbc8 000aff78 000afbe8 ntdll!ExecuteHandler2+0x26&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afb04 77f68cc5 000afbc8 000aff78 000afbe8 ntdll!ExecuteHandler2+0x26&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afbb0 77f45275 00000000 000afbe8 000afbc8 ntdll!ExecuteHandler+0x24&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afbb0 77e649d3 00000000 000afbe8 ntdll!KiUserExceptionDispatcher+0xe&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000aff08 7c3929f8 e06d7363 00000001 00000003 kernel32!RaiseException+0x51&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000aff48 01001331 000aff68 010018d4 00000000 MSVCR80!_CxxThrowException+0x34&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000aff84 01001469 00000001 002d5cc0 002d3b30 test!main+0x41&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000affc0 77e4f38c 00000000 00000000 7ffdf000 test!mainCRTStartup+0xb0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'"&gt;000afff0 00000000 010013b9 00000000 78746341 kernel32!BaseProcessStart+0x23&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;This stack dump is even better.&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/span&gt;It gives you full stack right before we executed jump to catch block! &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;The consequence of this behavior is that you need to be very careful when re-throwing exceptions from the catch block in recursive or deep functions - you might hit stack overflow! We actually did and not only once &lt;span style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/span&gt;&lt;/span&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;As many people say you live you learn :-)&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;Enjoy the rest of the day!&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN: 0in 0in 0pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=363428" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/slavao/archive/tags/Coding+_2600_+Debugging+tips/default.aspx">Coding &amp; Debugging tips</category></item></channel></rss>