From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jonathan Larmour To: "Trenton D. Adams" Cc: 'Grant Edwards' , 'Andrew Lunn' , 'eCos discussion' Subject: Re: [ECOS] Network programming for eCos under linux Date: Wed, 08 Aug 2001 09:06:00 -0000 Message-id: <3B716392.17D4E08D@redhat.com> References: <000001c12022$dfa2f460$090110ac@TRENT> X-SW-Source: 2001-08/msg00245.html "Trenton D. Adams" wrote: > > > > > > So, how would one go about making a buffer word aligned or DWORD > > aligned > > > just to be safe? > > > > something along the lines of: > > > > char buffer[1024]; > > #define ALIGNMENT 8 > > #define ALIGNUP(_x_) (((char *)(_x_) + ALIGN-1) & ~(ALIGN-1)) > > int *foo = ALIGNUP(buffer); > > > > You could also use __alignof(int) to give the alignment but that's > > obviously a GNU C-ism. > > > > First of all, I assume your ALIGN is actually supposed to be ALIGNMENT! Oops yes. > I don't understand your macro. Let's say _x_ happens to be memory > address 0x201 the macro formula would go like this > > = (0x201 + 7) & ~(7) > = 0x208 & 0xfffffff8 > = 0x208 > > So, now foo is pointing to an integer that is not at the beginning of > the buffer. This would mean that I couldn't put anything at the > beginning of the buffer, correct? If 8 byte alignment was the requirement then you certainly wouldn't want to. I suppose in that case you would make the buffer be 1031 bytes to ensure it could fit 1024 bytes post alignment. Jifl -- Red Hat, Rustat House, Clifton Road, Cambridge, UK. Tel: +44 (1223) 271062 Maybe this world is another planet's Hell -Aldous Huxley || Opinions==mine