473,748 Members | 2,398 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Is it required to comply byte alignment within a function?

Hi all.
This is my first post on this group. Nice to meet you, cool guys~!

I'm on system programming on various embedded systems and understand
very well the byte alignment issues. When I write C code, especially
design a structure, I pay attention to the order and size of member
variables. Because, my boss always says that all variables should be
aligned by 4byte boundary, if not a data abort will be occurred on a
specific machine such like ARM.

However, I've never seen such situation. Because, my compiler
automatically aligns the boundary and gives padding properly between
each variable in the structure, if needed. Of course, pack option of
the compiler may change its behavior and this assumption may be break
easily. So, I agree with my boss.

The problem I want to ask is that he wants me to align all local
variables even in a function. For example, see the following code.

Case #1 - THIS IS NOT ALLOWED!!
int foo1()
{
char a;
int b;
short c;
...
}

Case #2 - THIS IS OK. GOOD.
int foo2()
{
char a;
char dummy[3];
int b;
short c;
...
}

I think this is bothersome and even ridiculous.

How do you think about?
Is the case #1 can make a data abort or bus error?

Nov 14 '05 #1
14 1953
"gamja" <as****@gmail.c om> wrote:
The problem I want to ask is that he wants me to align all local
variables even in a function. For example, see the following code.

Case #1 - THIS IS NOT ALLOWED!!
int foo1()
{
char a;
int b;
short c;
...
}

Case #2 - THIS IS OK. GOOD.
int foo2()
{
char a;
char dummy[3];
int b;
short c;
...
}

I think this is bothersome and even ridiculous.

How do you think about?
The man is a fool, and that for more reasons than one.
Is the case #1 can make a data abort or bus error?


If it does, you're not using a C compiler, but a bodge job.

Richard
Nov 14 '05 #2
May I know why it is? Hmm.. I need more information somewhat technical
to persuade my boss.

Nov 14 '05 #3
gamja <as****@gmail.c om> wrote:
I'm on system programming on various embedded systems and understand
very well the byte alignment issues. When I write C code, especially
design a structure, I pay attention to the order and size of member
variables. Because, my boss always says that all variables should be
aligned by 4byte boundary, if not a data abort will be occurred on a
specific machine such like ARM. However, I've never seen such situation. Because, my compiler
automatically aligns the boundary and gives padding properly between
each variable in the structure, if needed. Of course, pack option of
the compiler may change its behavior and this assumption may be break
easily. So, I agree with my boss. The problem I want to ask is that he wants me to align all local
variables even in a function. For example, see the following code. Case #1 - THIS IS NOT ALLOWED!!
int foo1()
{
char a;
int b;
short c;
...
} Case #2 - THIS IS OK. GOOD.
int foo2()
{
char a;
char dummy[3];
int b;
short c;
...
} I think this is bothersome and even ridiculous.


It is. If your C compiler won't produce code that puts the variables
at addresses with proper alignment all by itself then that compiler
is horribly broken. Your case #1 is perfectly legal and each and
every compiler that has any right to call itself a C compiler will
put in the necessary padding all by itself or re-arrange the order
of the variables - there's no requirement that 'a' comes at lower
address than 'b' just because you defined 'a' before 'b'. So, on
some architectures you may end up with variables reordered to e.g.
'b', 'c', 'a'.

If what your boss claims would be true it would be nearly impossible
to write portable programs. There are lots of architectures with
different alignment requirements (e.g. for some types and machines
you may have to align not on 4-byte boundaries but on 8-byte or
maybe even 16-byte boundaries). And if you write programs that
are supposed to be independent of a special architecture then you
won't be able to know in advance how much padding is going to be
needed. This is only known to the compiler on the machine your
program finally is going to be compiled on and _it_ has to take
care of this problem.

Of course, some compilers have an (non-standard) option to overrule
this behaviour (but only, as far as I have seen, for structures).
Only if you insist on using that optionit becomes your responsibility
to take care of alignment issues, but then you asked for it and you
get given enough rope to hang yourself. But as long as you don't use
this option also all member variables of structures will always be
aligned properly by the compiler.

Regards, Jens
--
\ Jens Thoms Toerring ___ Je***********@p hysik.fu-berlin.de
\______________ ____________ http://www.toerring.de
Nov 14 '05 #4
gamja wrote:

Hi all.
This is my first post on this group. Nice to meet you, cool guys~!

I'm on system programming on various embedded systems and understand
very well the byte alignment issues. When I write C code, especially
design a structure, I pay attention to the order and size of member
variables. Because, my boss always says that all variables should be
aligned by 4byte boundary, if not a data abort will be occurred on a
specific machine such like ARM.

However, I've never seen such situation. Because, my compiler
automatically aligns the boundary and gives padding properly between
each variable in the structure, if needed.
Just like any C compiler.
Of course, pack option of
the compiler may change its behavior and this assumption may be break
easily. So, I agree with my boss.

The problem I want to ask is that he wants me to align all local
variables even in a function. For example, see the following code.

Case #1 - THIS IS NOT ALLOWED!!
int foo1()
{
char a;
int b;
short c;
...
}

Case #2 - THIS IS OK. GOOD.
int foo2()
{
char a;
char dummy[3];
int b;
short c;
...
}

I think this is bothersome and even ridiculous.

How do you think about?
There's problems in the logic as stated.
If case #2 does what you want,
then it's merely a matter of coincidence.
There's nothing in the rules of C which implies that
if two automatic objects are defined consecutively in source code,
that they then should have consecutive addresses.
There's also nothing in your boss' stated philosophy which
let's you assume that char a is properly aligned to begin with.
Is the case #1 can make a data abort or bus error?


Only if there is problem with the compiler.
Making sure that automatic objects are properly aligned
for their own access,
is part of what a C compiler is supposed to do.

--
pete
Nov 14 '05 #5
Hi,

Absolutely agree with everyone....ord er of variable declaration doesn't
have anything to do with order of those variables in memory after
compilation.

-vs_p...

Nov 14 '05 #6
gamja wrote:

May I know why it is? Hmm.. I need more information somewhat
technical to persuade my boss.


Why what is? You need to quote adequate context so every article
stands by itself. If you must use the foul and broken google
interface to usenet see below. Or better, get a real newsreader.

If you want to post a followup via groups.google.c om, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers.

--
Chuck F (cb********@yah oo.com) (cb********@wor ldnet.att.net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home .att.net> USE worldnet address!
Nov 14 '05 #7
Achintya wrote:

Absolutely agree with everyone....ord er of variable declaration
doesn't have anything to do with order of those variables in
memory after compilation.


If you want to post a followup via groups.google.c om, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers.

--
Chuck F (cb********@yah oo.com) (cb********@wor ldnet.att.net)
Available for consulting/temporary embedded and systems.
<http://cbfalconer.home .att.net> USE worldnet address!
Nov 14 '05 #8
>I'm on system programming on various embedded systems and understand
very well the byte alignment issues. When I write C code, especially
design a structure, I pay attention to the order and size of member
variables. Because, my boss always says that all variables should be
aligned by 4byte boundary, if not a data abort will be occurred on a
specific machine such like ARM.
All variables will be aligned properly by the C compiler to appropriate
alignment for the target machine, unless you're doing things with
pointers like interpreting a character buffer as a struct when it
wasn't declared that way.

C coders cannot align variables themselves, especially not auto
variables.

That assumption of a 4-byte boundary is not portable. Some machines
may require an 8-byte boundary, some may require a 2-byte boundary,
and there is no standards reason why a machine couldn't require a
7-byte boundary, although I doubt you'll ever see one commercially
available. Also, chars don't require alignment to more than 1 byte,
and they are by definition 1 byte in size (even if that byte is 37
bits long).
The problem I want to ask is that he wants me to align all local
variables even in a function. For example, see the following code.
You CANNOT align local variables.
Case #1 - THIS IS NOT ALLOWED!!
int foo1()
{
char a;
int b;
short c;
...
}

Case #2 - THIS IS OK. GOOD.
int foo2()
{
char a;
char dummy[3];
int b;
short c;


*NO* that is *NOT* good, since auto variables are ordered alphabetically
by *NAME*, or by the NAME spelled backwards, or by the NAME translated
into Pig Latin, and 'dummy' comes after 'c'. (Well, that's just
as stupid as the assumption that auto variables are stored in order
of declaration.)

Gordon L. Burditt
Nov 14 '05 #9
gamja wrote:
Hi all.
This is my first post on this group. Nice to meet you, cool guys~!

I'm on system programming on various embedded systems and understand
very well the byte alignment issues. When I write C code, especially
design a structure, I pay attention to the order and size of member
variables. Because, my boss always says that all variables should be
aligned by 4byte boundary, if not a data abort will be occurred on a
specific machine such like ARM.

However, I've never seen such situation. Because, my compiler
automatically aligns the boundary and gives padding properly between
each variable in the structure, if needed. Of course, pack option of
the compiler may change its behavior and this assumption may be break
easily. So, I agree with my boss.

The problem I want to ask is that he wants me to align all local
variables even in a function. For example, see the following code.

Case #1 - THIS IS NOT ALLOWED!!
int foo1()
{
char a;
int b;
short c;
...
}

Case #2 - THIS IS OK. GOOD.
int foo2()
{
char a;
char dummy[3];
int b;
short c;
...
}

I think this is bothersome and even ridiculous.

How do you think about?
Is the case #1 can make a data abort or bus error?

This is malarky unless you force the compiler to to
do something bad (via pragmas, such as PACK).

The compiler will automatically add padding between
members of a structure or union to make accessing
the data more efficient. This poses a problem when
trying to use structures to model real-world data.
The compiler will place variables at addresses for
improved efficiency unless the programmer tells
the compiler otherwise.

--
Thomas Matthews

C++ newsgroup welcome message:
http://www.slack.net/~shiva/welcome.txt
C++ Faq: http://www.parashift.com/c++-faq-lite
C Faq: http://www.eskimo.com/~scs/c-faq/top.html
alt.comp.lang.l earn.c-c++ faq:
http://www.comeaucomputing.com/learn/faq/
Other sites:
http://www.josuttis.com -- C++ STL Library book
http://www.sgi.com/tech/stl -- Standard Template Library
Nov 14 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

4
2944
by: Marco | last post by:
Hi I have to read a binary image. Info tell me that it is a binary image without encoding but with RLE. Also i know it is 4 bytes align. What it means ?? How can i read it ?? I red it is for portability whit different microprocessor. is it right ?? How can i perform my 4 bytes in rle decode function when i have to check first byte (length byte) to understand what i have to do with other bytes
4
17693
by: Shashi | last post by:
Can somebody explain how the byte alignment for structures work, taking the following example and considering: byte of 1 Byte word of 2 Bytes dword of 4 Bytes typedef struct { byte a; word b;
5
1466
by: Richard Harris | last post by:
Hello, Consider this: struct MBD { double x; double y; int i; }
11
3781
by: Taran | last post by:
Hi all, I was wondering how does address alignment to x byte boundary is done. For example, if I say "adjust the requested size to be on a 4-byte boundary" or for that matter 8 byte boundary. How is this adjustment/alignment done? I goolged around alot and wans't able to find how is it done, all it said was what is byte alignment and byte padding.
12
8126
by: Olaf Baeyens | last post by:
I am porting some of my buffer class code for C++ to C#. This C++ class allocates a block of memory using m_pBuffer=new BYTE; But since the class is also used for pointers for funtions that uses raw MMX and SSE power, the starting pointer MUST be starting at a 16 byte memory boundary. In C++ I allocate more memory than needed, and in a second phase I search for the address that starts on a 16 byte boundary. And I then use that new...
5
3913
by: Hendrik Schober | last post by:
Hi, we just run into the problem, that "default" alignment in the project properies dialog seem to be different. We have a project that's a DLL, which is linked with a couple of LIBs. All are with the same solution. All had "Default" set in the "Struct Member Alignment" entry. After some assembler debugging we found out that a struct member that is a member function pointer in
1
3179
by: Gajendra | last post by:
How does the byte packing and the byte alignment work in VC++ compiler? What is the effect of #pragma pack(n) on the alignment and byte packing for example while using the structur struc double a char b char c } in a 8 byte packing the sizeof structure is 16. Could anyone explain.
13
2352
by: Neo Geshel | last post by:
I have examined about 80+ different upload scripts on the 'net, both in VB and C#, and none seem to do what I need them to do. Perhaps someone here can point me somewhere that Google hasn't reached yet (I have gone all the way to page 50 on Google's results!!). Here are my requirements: • I have a DataGrid. Everything will be done from here. Everything. No exceptions. Everything will also be done in VB, without any code-behind to...
19
4137
by: glchin | last post by:
Does a compiler guarantee that the variable w below is placed on an eight-byte aligned address? void myFunction( long iFreq ) { const double w = two_pi * iFreq; ... ... }
0
8830
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
9544
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
9372
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
0
9247
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
0
8243
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6796
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
4874
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3313
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
3
2215
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.