Date: Wed, 29 Oct 2025 16:06:15 +0000
On Wednesday, October 29, 2025, Arthur O'Dwyer wrote:
>
>>
>> (Type 1) Cannot be relocated
>> (Type 2) Can be relocated by a simple memcpy
>> (Type 3) Can be relocated by an algorithm built into the compiler
>> (Type 4) Can be relocated by a custom-implemented relocator algorithm
>> provided by the author of the class
>>
>>
>
> There's a very clear physical delineation between Type 1, Type 2, and "all
> the rest." The line between Type 3 and Type 4 is not physical but
> linguistic, and arbitrary.
>
Key difference between a Type 3 algorithm and a Type 4 algorithm:
Type 4 algorithm can be written in fully-portable C++ code with
well-defined behaviour across all conforming implementations. An example
would be the relocator for libstdc++'s std::string on Linux. (Or for any
movable class: the combination of move + destroy).
Type 3 algorithm __must__ be written in platform-specific code targeting a
particular operating system, a particular CPU instruction set, or a
particular software or hardware or firmware configuration.
Type 3 will typically be written in very simple C code or assembler,
whereas Type 4 will be full-blown C++ code.
And more on a human note . . . you can have a very proficient C++
programmer who isn't really sure what a vtable is, and therefore doesn't
even know what the Type 3 algorithm is doing, whereas any decent C++
programmer will understand the Type 4 algorithm.
I'm sure there are C++ programmers out there who have full understanding of
how virtual methods work, without really knowing much about how vtables
work.
>
>>
>> (Type 1) Cannot be relocated
>> (Type 2) Can be relocated by a simple memcpy
>> (Type 3) Can be relocated by an algorithm built into the compiler
>> (Type 4) Can be relocated by a custom-implemented relocator algorithm
>> provided by the author of the class
>>
>>
>
> There's a very clear physical delineation between Type 1, Type 2, and "all
> the rest." The line between Type 3 and Type 4 is not physical but
> linguistic, and arbitrary.
>
Key difference between a Type 3 algorithm and a Type 4 algorithm:
Type 4 algorithm can be written in fully-portable C++ code with
well-defined behaviour across all conforming implementations. An example
would be the relocator for libstdc++'s std::string on Linux. (Or for any
movable class: the combination of move + destroy).
Type 3 algorithm __must__ be written in platform-specific code targeting a
particular operating system, a particular CPU instruction set, or a
particular software or hardware or firmware configuration.
Type 3 will typically be written in very simple C code or assembler,
whereas Type 4 will be full-blown C++ code.
And more on a human note . . . you can have a very proficient C++
programmer who isn't really sure what a vtable is, and therefore doesn't
even know what the Type 3 algorithm is doing, whereas any decent C++
programmer will understand the Type 4 algorithm.
I'm sure there are C++ programmers out there who have full understanding of
how virtual methods work, without really knowing much about how vtables
work.
Received on 2025-10-29 16:06:18
