Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #59524

Re: Alignment requirement of basic types

From James Kuyper <jameskuyper@verizon.net>
Newsgroups comp.lang.c
Subject Re: Alignment requirement of basic types
Date 2015-04-03 11:37 -0400
Organization Self
Message-ID <551EB3B9.7090206@verizon.net> (permalink)
References <mfm5mg$4rp$1@dont-email.me>

Show all headers | View raw


On 04/03/2015 09:48 AM, Noob wrote:
> Hello,
> 
> I had always been under the impression that objects of a given type
> had to be size-aligned, i.e.
> 2-byte objects had to be 2-byte aligned,
> 4-byte objects had to be 4-byte aligned,
> etc
> 
> However, I could not find this guarantee in C99 TC3 (N1256).
> And another poster claims that platforms may allow 4-byte
> objects to be {1,2,4}-byte aligned.
> 
> I suppose I was mistaken?

Yes.

The only relevant requirement is that sizeof(type) must be a positive
integer multiple of _Alignof(type). This requirement is not explicitly
stated anywhere, but it can be derived from consideration of how arrays
are implemented. It's entirely possible to meet that requirement by
having _Alignof(type) be 1 for all types.

Note: _Alignof() is a new feature of C2011, while your question is about
C99. However, the concept of alignment existed even in C90, and
_Alignof() provides a convenient notation for talking about that
concept, even when discussing versions of C that don't support that feature.

C2011 requires that alignments must be powers of 2, no such requirement
existed in earlier versions of the C standard. I've no idea whether
there's ever been an implementation of C where that wasn't the case.

> Do you know platforms where 4-byte types are only 2-byte aligned?

I'm prohibited from writing platform-specific code. As a result, I've
specialized in knowing what's not guaranteed, and how to write code so
it doesn't rely on those non-existent guarantees. I'm correspondingly
less well informed about what actual implementations do. Other people
here who are allowed to write non-portable code can answer that question
better than I can.

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Alignment requirement of basic types Noob <root@127.0.0.1> - 2015-04-03 15:48 +0200
  Re: Alignment requirement of basic types Tim Prince <tprince@computer.org> - 2015-04-03 10:23 -0400
  Re: Alignment requirement of basic types James Kuyper <jameskuyper@verizon.net> - 2015-04-03 11:37 -0400
    Re: Alignment requirement of basic types John Temples <usenet@xargs-spam.com> - 2015-04-03 17:21 +0000
      Re: Alignment requirement of basic types James Kuyper <jameskuyper@verizon.net> - 2015-04-03 13:45 -0400
        Re: Alignment requirement of basic types Kaz Kylheku <kaz@kylheku.com> - 2015-04-03 18:40 +0000
      Re: Alignment requirement of basic types Keith Thompson <kst-u@mib.org> - 2015-04-03 10:50 -0700
      Re: Alignment requirement of basic types glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-04-03 19:02 +0000
    Re: Alignment requirement of basic types Kaz Kylheku <kaz@kylheku.com> - 2015-04-03 18:01 +0000
  Re: Alignment requirement of basic types Richard Damon <Richard@Damon-Family.org> - 2015-04-03 12:05 -0400
    Re: Alignment requirement of basic types glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2015-04-03 16:48 +0000
  Re: Alignment requirement of basic types Kaz Kylheku <kaz@kylheku.com> - 2015-04-03 16:46 +0000
    Re: Alignment requirement of basic types Keith Thompson <kst-u@mib.org> - 2015-04-03 11:06 -0700
      Re: Alignment requirement of basic types Robert Wessel <robertwessel2@yahoo.com> - 2015-04-05 22:22 -0500
  Re: Alignment requirement of basic types Waldek Hebisch <hebisch@antispam.uni.wroc.pl> - 2015-04-04 23:15 +0000

csiph-web