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


Groups > comp.lang.c > #147875

Re: Bit field usage

From David Brown <david.brown@hesbynett.no>
Newsgroups comp.lang.c
Subject Re: Bit field usage
Date 2019-11-10 14:08 +0100
Organization A noiseless patient Spider
Message-ID <qq9251$aej$1@dont-email.me> (permalink)
References (8 earlier) <95febac6-81a6-490b-9197-36c3b1ae5811@googlegroups.com> <qp529j$eep$1@dont-email.me> <slrnqs901k.s72.ccollins476ad@pseudoephedrine.nightmare-heaven.no-ip.biz> <qq34rd$v8u$1@dont-email.me> <slrnqsbcdc.s72.ccollins476ad@pseudoephedrine.nightmare-heaven.no-ip.biz>

Show all headers | View raw


On 08/11/2019 19:19, Christopher Collins wrote:
> On 2019-11-08, David Brown <david.brown@hesbynett.no> wrote:
>> On 07/11/2019 21:36, Christopher Collins wrote:
>>> I disagree with the claim that there is rarely any advantage in having
>>> unaligned data.  Combined with packed structs, support for unaligned
>>> access can result in a considerable code size reduction.  I included a
>>> simple demonstration in an earlier post:
>>> <https://groups.google.com/d/msg/comp.lang.c++/a5xVfaw1y08/IdcvfGNbFQAJ>.
>>>
>>
>> I don't remember the details of that thread, but it looks like you are
>> trying to find an efficient way to copy a packed struct into a byte
>> buffer.  The quotation from my own post was:
>>
>>> Write your code properly and safely (using shifts and masks, memcpy, or
>>> compiler-specific features or intrinsics) and let the compiler turn it
>>> into unaligned accesses.  Writing safe, correct, and valid source code
>>> is the programmer's responsibility.  Turning it into small and fast
>>> object code is the compiler's responsibility.  Don't try to do the
>>> compiler's job - work with it so that it can to the best job it can.
>>
>> I stand by that advice.  By using the compiler-specific "packed" struct
>> feature (most compilers have an equivalent, but the details are specific
>> to the compiler) it is then safe to use a "memcpy" for a short marshal
>> function.  And if you also use the "align" attribute (or C11 _Alignas),
>> the compiler can do the copying using aligned 32 bit accesses rather
>> than unaligned accesses, for greater speed.
>>
>> Unaligned accesses are not a benefit here - aligned would have worked
>> better.
> 
> You can't always arrange for aligned data.  Take a networking stack for
> example.  You need functions to parse and strip headers from the front
> of a buffer.  Unless each header is sized according to the alignment
> requirements of the processor, the buffer won't remain aligned
> throughout this process.
> 
> The reverse process, prepending headers to outgoing data, has the same
> characteristics.

I said that unaligned accesses were not a benefit in this case, not that 
they are never useful.

> 
> I used to eschew packed structs as nonstandard and of little practical
> use.  Then we tried using them in a Bluetooth stack implementation and
> the reduction in code size was dramatic (sorry, I don't have numbers).
> I believe there is simply no way to achieve the same reduction in code
> size without using packed structs (on architectures that support
> unaligned access).
> 

You are wrong - but only if you have a good enough compiler, use the 
right options, and write your code in a way that the compiler recognises 
and optimises.  It is entirely possible for a compiler to optimise 
memcpy or byte-by-byte access into unaligned word access if the target 
supports it, and it certainly happens in some cases.  But it won't 
happen in all cases, and if efficiency matters you'll have to check the 
generated output.

I don't see much use of packed structs.  But that does not mean they are 
not useful on occasion.

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


Thread

Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-24 08:03 +0200
  Re: Bit field usage Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-10-24 10:15 -0600
    Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-24 18:55 +0200
      Re: Bit field usage Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-10-24 21:28 -0600
    Re: Bit field usage scott@slp53.sl.home (Scott Lurndal) - 2019-10-24 17:22 +0000
      Re: Bit field usage Bonita Montero <Bonita.Montero@gmail.com> - 2019-10-24 19:45 +0200
        Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-24 19:59 +0200
          Re: Bit field usage Bonita Montero <Bonita.Montero@gmail.com> - 2019-10-24 20:02 +0200
            Re: Bit field usage Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-10-24 21:29 -0600
              Re: Bit field usage Bonita Montero <Bonita.Montero@gmail.com> - 2019-10-25 07:51 +0200
                Re: Bit field usage scott@slp53.sl.home (Scott Lurndal) - 2019-10-25 15:05 +0000
        Re: Bit field usage Bart <bc@freeuk.com> - 2019-10-24 19:13 +0100
          Re: Bit field usage Bonita Montero <Bonita.Montero@gmail.com> - 2019-10-24 20:54 +0200
            Re: Bit field usage Bart <bc@freeuk.com> - 2019-10-24 20:12 +0100
              Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-10-24 23:03 +0200
                Re: Bit field usage Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-10-24 22:50 +0100
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-10-25 09:18 +0200
                Re: Bit field usage Reinhardt Behm <rbehm@hushmail.com> - 2019-10-25 15:46 +0800
                Re: Bit field usage Robert Wessel <robertwessel2@yahoo.com> - 2019-10-26 12:36 -0500
                Re: Bit field usage scott@slp53.sl.home (Scott Lurndal) - 2019-10-25 15:04 +0000
                Re: Bit field usage Robert Wessel <robertwessel2@yahoo.com> - 2019-10-26 12:40 -0500
                Re: Bit field usage Philipp Klaus Krause <pkk@spth.de> - 2019-10-26 21:12 +0200
              Re: Bit field usage Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-10-25 09:25 -0600
                Re: Bit field usage Robert Wessel <robertwessel2@yahoo.com> - 2019-10-26 12:52 -0500
      Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-24 19:56 +0200
        Re: Bit field usage already5chosen@yahoo.com - 2019-10-24 12:03 -0700
          Re: Bit field usage scott@slp53.sl.home (Scott Lurndal) - 2019-10-24 19:40 +0000
            Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-24 22:15 +0200
            Re: Bit field usage already5chosen@yahoo.com - 2019-10-24 14:16 -0700
    Re: Bit field usage Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-10-24 17:50 -0700
      Re: Bit field usage Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-10-25 09:36 -0600
        Re: Bit field usage Tim Rentsch <tr.17687@z991.linuxsc.com> - 2019-10-27 04:54 -0700
          Re: Bit field usage Joe Pfeiffer <pfeiffer@cs.nmsu.edu> - 2019-10-27 10:05 -0600
  Re: Bit field usage Philipp Klaus Krause <pkk@spth.de> - 2019-10-26 20:15 +0200
    Re: Bit field usage Philipp Klaus Krause <pkk@spth.de> - 2019-10-26 20:16 +0200
      Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-26 20:37 +0200
        Re: Bit field usage Robert Wessel <robertwessel2@yahoo.com> - 2019-10-26 13:41 -0500
          Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-26 21:54 +0200
            Re: Bit field usage already5chosen@yahoo.com - 2019-10-27 03:46 -0700
              Re: Bit field usage jacobnavia <jacob@jacob.remcomp.fr> - 2019-10-27 12:50 +0100
                Re: Bit field usage already5chosen@yahoo.com - 2019-10-27 06:37 -0700
              Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-10-27 13:00 +0100
                Re: Bit field usage already5chosen@yahoo.com - 2019-10-27 07:19 -0700
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-10-27 22:30 +0100
                Re: Bit field usage Christopher Collins <ccollins476ad@gmail.com> - 2019-11-07 12:36 -0800
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-11-08 08:18 +0100
                Re: Bit field usage Christopher Collins <ccollins476ad@gmail.com> - 2019-11-08 10:19 -0800
                Re: Bit field usage Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-11-08 21:47 +0000
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-11-10 14:08 +0100
                Re: Bit field usage Christopher Collins <ccollins476ad@gmail.com> - 2019-11-11 09:26 -0800
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-11-11 20:31 +0100
                Re: Bit field usage Christopher Collins <ccollins476ad@gmail.com> - 2019-11-11 23:01 -0800
                Re: Bit field usage Christopher Collins <ccollins476ad@gmail.com> - 2019-11-11 23:25 -0800
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-11-12 10:54 +0100
                Re: Bit field usage Jorgen Grahn <grahn+nntp@snipabacken.se> - 2019-11-12 14:43 +0000
                Re: Bit field usage James Kuyper <jameskuyper@alumni.caltech.edu> - 2019-11-12 10:54 -0500
                Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-11-12 19:37 +0100
              Re: Bit field usage Robert Wessel <robertwessel2@yahoo.com> - 2019-10-27 08:36 -0500
                Re: Bit field usage already5chosen@yahoo.com - 2019-10-27 06:49 -0700
            Re: Bit field usage Bonita Montero <Bonita.Montero@gmail.com> - 2019-10-27 14:23 +0100
            Re: Bit field usage Robert Wessel <robertwessel2@yahoo.com> - 2019-10-27 08:42 -0500
        Re: Bit field usage Philipp Klaus Krause <pkk@spth.de> - 2019-10-26 21:06 +0200
        Re: Bit field usage Bart <bc@freeuk.com> - 2019-10-26 20:41 +0100
          Re: Bit field usage Philipp Klaus Krause <pkk@spth.de> - 2019-10-27 08:29 +0100
            Re: Bit field usage David Brown <david.brown@hesbynett.no> - 2019-10-27 13:05 +0100

csiph-web