Home » Interview Questions » Interviews » Story Details
Printable Version

Interview Question: Find size of a struct without using sizeof operator

by Kamal Rawat on Jan 16, 2012

Write code to calculate the size of a struct in C (or C++) without using sizeof operator
Comments: 0    Views: 1051

MCN Professionals | Interview Question of the day

MCN Professionals is starting Industrial Training for MCA-2012 Batch. Have a look at our Industrial Training Program and Course Details.
-----------------------------------------------------------------------------------------------------------------------------------------

Today's Question:
How will you find the size of a structure in C/C++ language without using sizeof operator.

(Note: sum of sizes of all fields of a structure may not be equal to the exact memory allocated to the structure. See, Method-1 in solution).
Solution:
Method-1: (Erroneous)

You may be tempted to calculate the size of all the fields of structure, then compute the sum of all these sizes and get the result. For example:
struct Student{
    int rollno;
    char name[25];
    float avgMarks;
}obj;
You can say that
size_of_obj = sizeof(int) + 25*sizeof(char) + sizeof(float);
There are 2 problems in this:
  1. We are using sizeof operator to calculate the sizeof fields.. :)
  2. There may be padding along the fields of a structure. This padding is an extra memory which will not be used to store anything, but to optimize the read/write of individual fields of a structure variable. (If a field is stored in two words of memory then it will take 2 reads, but if we leave the space in between so that the field is stored in just one word, the read & write operation will take only one cycle, read more about it here...).

Method-2: (Right method)

Right method is to allocate an array of structure and compare the memory addresses of consecutive elements of an Array:
struct Student arr[2];

size_of_struct = (char*)&arr[1] - (char*)&arr[0];
Note that if we don't convert the address to char* then the answer will always be 1 (because it will talk about the memory block & not memory location).
---------------------------------------------------------------------------

Interview Questions Archive:

         To see all the questions in the category click here...


Post a Comment
*
DevExpress PowerBuilder Web Development Windows Development Languages Software Engineering Databases
iPhone Architecture Secutiry UML & Modeling Operating Systems Networking Testing
Graphics Design Project Management Hardware Open Source Games Development Business Intelligence Visual Studio LightSwitch 2011
MonoDevelop Visual Studio 2010 ASP.NET HTML, DHTML XML PHP JavaScript
Silverlight Web Services WCF Windows Forms WPF Windows Services Dynamic Link Libraries
ActiveX COM, DCOM, ATL C# VB.NET C++ F# Java
Pascal SQL Server Oracle DB2 MS-Access Windows Servers Windows
Linux Unix SAP LINQ .NET Framework ADO.NET Reporting
Crystal Reports SQL Server Reporting Services Igenda Reports Active Reports Adobe Fireworks Arrays & Collections Hosting
Future Trends Android Windows Phone Smart Devices Business M&A Investment & Funding
Web Browsers Internet Explorer Firefox Safari Common Entrepreneurs Students
Consulting Wiki Gadgets MobileMe iCloud iOS Social Media
Facebook Twitter LinkedIn Google+ Microsoft Kinect XBox
Wii Playstation DirectX i OS OS X CIO, CTO, CEO Windows 8
Web Design Expression Blend 4 Photoshop CS5 Creative Suite 5.5 Expression Web 4 Expression Studio 4 Creative Suite® 5.5 Design
Creative Suite 5.5 Web Creative Suite 5.5 Production Startups Funding M&A Laptops Smart Phones
Desktops Cameras & Camcorders Netbooks Tablets Virtualization Microsoft Surface WordPress
Software Products Cloud Computing Current Affairs Technology TV TV
Earnings XAML E-Commerce MonoTouch Mono for Android Deals Electronics
Mobile Phone Laptop Tablet Book Computer Press Releases Reviews
Products Books Companies Windows Azure SQL Azure Interviews Mac
Web Browsers Symbian Windows Forms WPF Windows Services HTML 5 Office 365
SharePoint 2010 Exchange Server Adobe Visual Studio 2012 iPad Flex / Flash Games
Windows 9
X
 Login
Please login to submit a new post, reply and edit exiting posts, see user profiles, and access more features. If you are not a registered member, Register here.
User Id / Email:
Password:  
Forgot Password | Forgot UserName