<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Abi on File Descriptor Two</title><link>https://peter0x44.github.io/tags/abi/</link><description>Recent content in Abi on File Descriptor Two</description><generator>Hugo -- 0.148.1</generator><language>en-us</language><copyright>2025 Peter0x44</copyright><lastBuildDate>Sat, 28 Feb 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://peter0x44.github.io/tags/abi/index.xml" rel="self" type="application/rss+xml"/><item><title>How Virtual Tables Work in the Itanium C++ ABI</title><link>https://peter0x44.github.io/posts/vtables-itanium-abi/</link><pubDate>Sat, 28 Feb 2026 12:00:00 +0000</pubDate><guid>https://peter0x44.github.io/posts/vtables-itanium-abi/</guid><description>&lt;p>Virtual functions are one of C++&amp;rsquo;s core features, enabling runtime polymorphism. Most C++ programmers use them regularly, yet few understand how they work in practice. What does the compiler actually generate when you declare a function &lt;code>virtual&lt;/code>? How does the program figure out which implementation to call at runtime? Where is the vtable data actually stored? This blog post is focused on answering these questions.&lt;/p>
&lt;p>The C++ standard specifies behavior but not implementation. This post describes the &lt;a href="https://itanium-cxx-abi.github.io/cxx-abi/abi.html">Itanium C++ ABI&lt;/a> used by most platforms, with the notable exception of Microsoft MSVC.&lt;/p></description></item></channel></rss>