Accessing a C++ Object in C Code: The Memory Layout of Derived Objects

Accessing a C++ Object in C Code: The Memory Layout of Derived Objects

The Standard does not specify the memory layout of base class subobjects in a derived class. In practice, however, all C++ compilers use the same convention: The base class subobject appears first (in left-to-right order in case of multiple inheritance), and data members of the derived class follow. C code can access derived objects, as long as the derived class abides by the same restrictions that were specified in the Tip “Accessing a C++ Object in C Code.” For example, consider a non-polymorphic class that inherits from Date (the declaration of Date is repeated here for convenience) and has additional data members:

 class Date{public:  int day;  int month;  int year;  Date(); //current date  ~Date();  bool isLeap() const;  bool operator == (const Date& other);};class DateTime: public Date{public:    long time; //additional members  char AM // AM or PM?  DateTime();  ~DateTime();  long getTime() const;};

The two additional data members of DateTime, namely ‘time’ and ‘AM’, are appended after the three members of the base class Date, so the memory layout of a DateTime object is equivalent to this C struct:

 struct POD_DateTime{  int day;  int month;  int year;  long time  char AM;};

As with class Date, the non-polymorphic member functions of DateTime have no effect on the size or memory layout of the object.


About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist