<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Reference on Jasper</title><link>https://jasper-aa64.github.io/ref/</link><description>Recent content in Reference on Jasper</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 03 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jasper-aa64.github.io/ref/index.xml" rel="self" type="application/rss+xml"/><item><title>CPU and Memory: Map, Numbers, Estimates</title><link>https://jasper-aa64.github.io/ref/cpu-memory/</link><pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate><guid>https://jasper-aa64.github.io/ref/cpu-memory/</guid><description>&lt;p&gt;This page is a map to keep open, not a post. It has three parts, in the order &amp;ldquo;where → how big and how fast → how to combine&amp;rdquo;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://jasper-aa64.github.io/ref/cpu-memory/#map"&gt;Memory hierarchy&lt;/a&gt;: the hardware map, which boxes a read or a write passes through, and which post covers each box.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jasper-aa64.github.io/ref/cpu-memory/#numbers"&gt;Performance parameters&lt;/a&gt;: latency, bandwidth and capacity for each box, how many requests can be in flight (MLP), and how fast the CPU itself wants data (bandwidth demand). They are rough magnitudes for intuition, not any particular machine.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jasper-aa64.github.io/ref/cpu-memory/#estimate"&gt;Estimation model&lt;/a&gt;: one formula that strings the numbers of Part 2 together, to tell whether code is slow because it moves too much or because each move is slow.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When a later post covers a new hardware layer, it goes here. One layer up, the threads a market data message passes through are mapped in &lt;a href="https://jasper-aa64.github.io/ref/trading-architecture/"&gt;Trading System Architecture&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Trading System Architecture: Map, Times, How to Split</title><link>https://jasper-aa64.github.io/ref/trading-architecture/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://jasper-aa64.github.io/ref/trading-architecture/</guid><description>&lt;p&gt;This page is an architecture map to keep open, and a companion to the &lt;a href="https://jasper-aa64.github.io/ref/cpu-memory/"&gt;hardware map&lt;/a&gt;: that page follows one memory access through the hardware, this one follows one market data message through the threads. It has three parts, in the order &amp;ldquo;where → how fast → how to split&amp;rdquo;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://jasper-aa64.github.io/ref/trading-architecture/#map"&gt;Architecture map&lt;/a&gt;: the boxes a message passes through on its way to a fill, and which post covers each box.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jasper-aa64.github.io/ref/trading-architecture/#numbers"&gt;Times&lt;/a&gt;: roughly how long each stage takes, to tell which stage is worth optimising. They are orders of magnitude, not measurements of any one system.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jasper-aa64.github.io/ref/trading-architecture/#rules"&gt;How to split&lt;/a&gt;: how industrial systems split threads, where they put queues, and where they have to join.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;When a later post covers a new component, it goes here.&lt;/p&gt;</description></item><item><title>perf</title><link/><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid/><description>&lt;p&gt;An entry in the Reference list, not a page: the card links to the post named in &lt;code&gt;target&lt;/code&gt; and takes its title, summary and date from it, so the post stays the only copy.&lt;/p&gt;</description></item><item><title>Performance Bottlenecks: Signals, Causes, Fixes</title><link>https://jasper-aa64.github.io/ref/bottlenecks/</link><pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate><guid>https://jasper-aa64.github.io/ref/bottlenecks/</guid><description>&lt;!-- Card source files live in content/bottlenecks/: &lt;id&gt;.md (English), &lt;id&gt;.zh.md (Chinese); the file name is the id and the anchor below. Parts 1 and 2 are gathered from those files by the bottleneck-lookup and bottleneck-cards shortcodes; posts embed the same card with the bottleneck shortcode and the id. Adding a bottleneck means adding those two files only. --&gt;
&lt;p&gt;Once &lt;a href="https://jasper-aa64.github.io/posts/low-latency-perf-profiling/"&gt;perf&lt;/a&gt; has found the hot spot, the next step is recognizing which bottleneck it is and how to fix it. This page writes each common bottleneck as a card: the signal is what you see in perf or in the source, the cause is why it is slow, the fix is how to change it, verify is how to confirm the fix, and the mechanism links to the post on this site that explains it.&lt;/p&gt;</description></item><item><title>Virtual Functions: vptr, vtable and Dynamic Polymorphism</title><link>https://jasper-aa64.github.io/ref/virtual-functions/</link><pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate><guid>https://jasper-aa64.github.io/ref/virtual-functions/</guid><description>A virtual call = load the vptr at the start of the object → load one slot of the class&amp;rsquo;s vtable → jump to that address. The expensive part is usually not the jump but the lost inlining; when the type is known at compile time, static polymorphism avoids it. To reuse a class&amp;rsquo;s implementation, make it a member, don&amp;rsquo;t inherit from it.</description></item><item><title>const, constexpr, consteval, constinit: Which One Guarantees Compile Time</title><link>https://jasper-aa64.github.io/ref/const-constexpr/</link><pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate><guid>https://jasper-aa64.github.io/ref/const-constexpr/</guid><description>const is about whether a value can change, not when it is computed; for compile-time values use constexpr variables and consteval functions; for static variables with initialization-order problems use constinit.</description></item><item><title>shared_ptr and enable_shared_from_this</title><link>https://jasper-aa64.github.io/ref/shared-ptr/</link><pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate><guid>https://jasper-aa64.github.io/ref/shared-ptr/</guid><description>The count lives in the control block and make_shared allocates once; to keep yourself alive from a member function, shared_from_this() shares the outside control block, while a second control block destroys the object twice.</description></item></channel></rss>