Date: Sun, 4 Aug 2002 19:09:16 -0700 From: "Balaji, Pavan" <pavan.balaji@intel.com> To: "'freebsd-questions@freebsd.org'" <freebsd-questions@freebsd.org> Subject: GCC versions!!! Message-ID: <3D386AED1B47D411A94300508B11F18704AD6999@fmsmsx116.fm.intel.com>
next in thread | raw e-mail | index | archive | help
Consider the following program:
test.c
----
#include <stdio.h>
struct {
char x1;
char x2;
short x3;
short x4;
} a;
int main()
{
int *k;
a.x1 = 1; a.x2 = 0; a.x3 = 0; a.x4 = 0; k = &a; printf ("%d ", *k);
a.x1 = 0; a.x2 = 1; a.x3 = 0; a.x4 = 0; k = &a; printf ("%d ", *k);
a.x1 = 0; a.x2 = 0; a.x3 = 1; a.x4 = 0; k = &a; printf ("%d ", *k);
a.x1 = 0; a.x2 = 0; a.x3 = 0; a.x4 = 1; k = &a; printf ("%d ", *k);
return 0;
}
---
I ran this program on FreeBSD (GCC version 2.95.3) and the output for this
program was
1 256 65536 0
I reran it on Linux (GCC version 3.0.something) and the output was:
16777216 65536 1 0 (as expected).
After a little poking around, I could figure out that the memory for the
structure was allocated in a way that for every word boundary, the bytes
allocation is in the reverse order. For example, if I have 4 characters in a
structure a, b, c and d, the memory for d is allocated first, then c, then b
and finally a.
Is this something to do with gcc or with freebsd? Any ideas?
Pavan Balaji,
Intel Corporation
Email: pavan.balaji@intel.com
"Only the Paranoid Survive" -- Andy Grove
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3D386AED1B47D411A94300508B11F18704AD6999>
