From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,703c4f68db81387d X-Google-Thread: 109fba,703c4f68db81387d X-Google-Thread: 115aec,703c4f68db81387d X-Google-Thread: f43e6,703c4f68db81387d X-Google-Attributes: gid103376,gid109fba,gid115aec,gidf43e6,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news4.google.com!news.glorb.com!border1.nntp.dca.giganews.com!nntp.giganews.com!wn14feed!worldnet.att.net!12.120.4.37!attcg2!ip.att.net!news.binc.net!kilgallen From: Kilgallen@SpamCop.net (Larry Kilgallen) Newsgroups: comp.lang.ada,comp.lang.c++,comp.realtime,comp.software-eng Subject: Re: [OT] Re: Teaching new tricks to an old dog (C++ -->Ada) Date: 28 Mar 2005 11:41:29 -0600 Organization: Berbee Information Networks Corporation Message-ID: References: <4229bad9$0$1019$afc38c87@news.optusnet.com.au> <1110032222.447846.167060@g14g2000cwa.googlegroups.com> <871xau9nlh.fsf@insalien.org> <3SjWd.103128$Vf.3969241@news000.worldonline.dk> <87r7iu85lf.fsf@insalien.org> <1110052142.832650@athnrd02> <1lr611thktbau$.1dj95z21h7l5v.dlg@40tude.net> In article , "REH" writes: > > "Ioannis Vranos" wrote in message > news:1112026376.920221@athnrd02... >> REH wrote: >> >> > These will mostly fail on systems with alignment constraints (SPARC, > PPC, >> > etc.). >> >> Why? >> >> >> -- > > Well, suppose your class contains a variable of type double, which on some > systems is 8 bytes and requires 8 byte alignment. The array you are > defining to hold the class is a character array, which only requires 1 byte > alignment. If it is created with a 1 byte alignment, when you create the > class in it using placement new, now the double is misaligned. When you > access it nasty things can happen. Intel processors can handled misaligned > variables, but take extra clock cycles to do so. On a SPARC or PowerPC, you > will throw a hardware exception (segmentation fault or machine check most > likely). A way around this problem is to either 1) make an array of > doubles, 2) union the array with a double, or 3) allocate from the heap. This can depend on the operating system. On Alpha (and I presume on Itanium) VMS catches such exceptions and fixes them up. It slows things down, but the result is still correct.