

C++ object model and other internals explained with simple C code - hanifvirani
http://www.avabodh.com/cxxin/cxx.html

======
faragon
Unfortunately, C++ internals change from compiler to compiler, even from same
manufacturer between updates, making impossible usable C++ dynamic libraries
safely (C calling conventions are standard, while that is not enough for C++,
because of class handling). Unless that becomes solved, C++ will never be able
to compete with C for library and system development.

------
eliasmacpherson
I will struggle my way through this, having mostly given up on "Inside the C++
Object Model" by Stan Lippman. I have heard it said that Lippman's book is
very out of date and a lot of it doesn't apply to modern compilers.

Link seems to be down, although some of it is cached by google. Is there a way
to use google webcache to edit the hyperlinks in a cached article so that they
point to cached versions of the target?

~~~
mahmud
I thought Lippman's book was adequate. And if you're familiar with the
implementation of various statically-typed object models (oxymoron?) then you
can see a few ways suggest themselves.

Depends on what you want to do with this knowledge. If you want to use this
knowledge for gains in performance, you will have to get your hands dirty and
dig into specific implementations.

~~~
eliasmacpherson
I guess I'm complaining more about the reader than the writer. It does provide
a useful approach to test specific implementations. It gives good insight as
to why certain features are to be avoided for performance, ie multiple
inheritance, virtual functions under virtual inheritance, RTTI.

The section on exception handling says that there are compiler dependent code
size increases and speed is impacted (5% - 10%) even if it is not triggered.
That contradicts Stroustrup in Design and Evolution of C++ where its stated
that it should be the same cost as a function call. I've heard other people
say that exception handling is now "free". I should spend less time gaining
second hand information and more time trying this stuff out myself.

------
malkia
In our past games, we had extensive C++ serialization (marshalling, pickling,
whatever you call it).

We had to fight gcc 2.95, metrowerks, and few other compilers putting the
"virtual table pointer" at different places - begining of object, end, etc.
Then alignment differences (not strictly C++), and bitfields. Hopefully
mangling was avoided, as we did not had to reference at runtime the data, we
had pointers.

It was quite messy, and you could not reuse exported data - had to be for each
platform/compiler.

------
cawhitworth
Worth noting that this is very gcc specific. Implementation details will vary
across compilers, but it's not made clear.

~~~
phaedrus
From the introduction, "NOTE: The actual structure of the generated code
depends on the computer architecture, operating system and compiler."

------
swah
I'm getting:

    
    
      PDOException: SQLSTATE[HY000] [2002] Can't connect to local
      MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
      in lock_may_be_available() (line 165 of 
      /srv/www/avabodh.com/public_html/includes/lock.inc).

~~~
njs12345
Coral cache: <http://www.avabodh.com.nyud.net:8090/cxxin/cxx.html>

~~~
reemrevnivek
That cache just points to the outline for me. How do I get to, say, the part
of the article on exception handling? Or, alternatively, the paper on C?

Disclaimer: I've never used Drupal or a coral cache before, so I don't know
how to create these links. I'm going to try the Google cache...

~~~
njs12345
To make a coral cache link you just append .nyud.net:8090 to the hostname, as
above. Less useful nowadays than it once was, back when a good Slashdotting
was guaranteed to cause a server meltdown..

------
rdtsc
It is also worth highlighting that extensive object oriented systems can and
have been built on top of C :

<http://library.gnome.org/devel/gobject/stable/>

------
jpr
If C++ can be explained adequately with _simple_ C code, why use C++ in the
first place?

~~~
mahmud
Some _manual_ C code can adequately explain what C++ does _automatically_.

The difference is cost; you have to link against C code, for some platforms,
what C++ provides for free on all platforms.

