Visual C++ invalid sizeof or not ???

Posted on 2002-05-07
Medium Priority
Last Modified: 2013-12-14
Is this bug or not ????

DWORD test
struct stest
WORD v2;

test = sizeof(stest)

Variable test must be equial to 6 but it returns 8
Waiting for Answer :)

Question by:chep
  • 3
LVL 86

Accepted Solution

jkr earned 300 total points
ID: 6994587
8 is correct, this is because of 'structure member alignment' - the compiler will add two padding bytes, so pointers to the strct are aligned on a DWORD boundary. To turn off that behaviour, use

#pragma pack ( 1)
LVL 86

Expert Comment

ID: 6994595
BTW, see also the chapter 'sizeof' on the VC++ online docs:

sizeof Operator
sizeof expression

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.

The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses).

When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof returns the size of the entire array. The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.


// Example of the sizeof keyword
size_t  i = sizeof( int );

struct align_depends {
    char c;
    int i;
size_t size = sizeof(align_depends);  // The value of size depends on
                                   //  the value set with /Zp or
                                   //  #pragma pack

int  array[] = { 1, 2, 3, 4, 5 };     // sizeof( array ) is 20
                                      // sizeof( array[0] ) is 4
size_t  sizearr =                        // Count of items in array
   sizeof( array ) / sizeof( array[0] );

Expert Comment

ID: 6994598
It is not a bug. It uses algnment structure for fast access.
LVL 86

Expert Comment

ID: 6994720
Thnx - but why a 'B'? Is there anything I left open?

Featured Post

7 new features that'll make your work life better

It’s our mission to create a product that solves the huge challenges you face at work every day. In case you missed it, here are 7 delightful things we've added recently to monday to make it even more awesome.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
Programmer's Notepad is, one of the best free text editing tools available, simply because the developers appear to have second-guessed every weird problem or issue a programmer is likely to run into. One of these problems is selecting and deleti…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

597 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question