Re:Abstraction without overhead: traits in Rust
by comex on Monday May 11, 2015 @06:49PM
(#9528362)
Would there be a hit? C++ has to do this:
object pointer -> load vtable -> load function pointer
while a compressed fat pointer would be like:
fat pointer -> shift to extract vtable index -> shift to make into a global table offset -> load global table base from a global variable -> load function pointer
Two loads in both cases, but in the compressed case the first one will almost always be cached; more code bloat, but not that much, and you save a bit of memory in the objects themselves.
object pointer -> load vtable -> load function pointer
while a compressed fat pointer would be like:
fat pointer -> shift to extract vtable index -> shift to make into a global table offset -> load global table base from a global variable -> load function pointer
Two loads in both cases, but in the compressed case the first one will almost always be cached; more code bloat, but not that much, and you save a bit of memory in the objects themselves.