Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c > #147185
| From | jacobnavia <jacob@jacob.remcomp.fr> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Bit field usage |
| Date | 2019-10-24 08:03 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <qorerp$af6$1@dont-email.me> (permalink) |
Suppose this structure:
struct data {
// Some flags
unsigned isOld:1;
unsigned writtenAlready:1;
unsigned discarded:1;
double *table;
};
Contrary to what many beginners would believe, in a 64 bit architecture
the above structure and the structure below have the same size.
struct data1 {
// Some flags
unsigned char isOld;
unsigned char writtenAlready;
unsigned char discarded;
double *table;
};
The 3 bits of the "data" structure are followed by a pointer that is
aligned to a 64 bit boundary! The following program shows this in practice:
struct data {
// Some flags
unsigned isOld:1;
unsigned writtenAlready:1;
unsigned discarded:1;
double *table;
};
struct data1 {
// Some flags
unsigned char isOld;
unsigned char writtenAlready;
unsigned char discarded;
double *table;
};
#include <stdio.h>
int main(void)
{
printf("%Lu %Lu\n",sizeof(struct data),sizeof(struct data1));
}
Output:
16 16
This could be considered as unimportant, and in most cases it is. In
some situations of heavy use of bitfields however, they have two drawbacks:
1) To access a bitfield, the compiler generates a sequence of shifts
that increases execution time.
2) The instructions sequence of the shifts increases code size.
Obviously, if you have more than 64 flags (in a 64 bit machine) or more
than 32 flags in a 32 bit machine, bitfields can save a lot of data
space: you can fit up to 128 bitfields in 16 bytes, instead of 128 bytes
if you use a full char for each bit field.
It is important to check two things:
1) If a bit field is heavily used, consider transforming it into an
unsigned char.
2) If you have a few bit fields with bitsize less than the word size of
your machine, consider if the alignment requirements are nullifying any
space gains obtained by using bit fields.
jacob
Back to comp.lang.c | Previous | Next — Next in thread | Find similar | Unroll 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