Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.compilers > #2754
| From | gah4 <gah4@u.washington.edu> |
|---|---|
| Newsgroups | comp.compilers |
| Subject | Re: Union C++ standard |
| Date | 2021-11-26 12:16 -0800 |
| Organization | Compilers Central |
| Message-ID | <21-11-007@comp.compilers> (permalink) |
| References | <21-11-004@comp.compilers> |
On Friday, November 26, 2021 at 9:32:00 AM UTC-8, Hans-Peter Diettrich wrote: > Can somebody explain why the access to members of a union is "undefined" > except for the most recently written member? > What can be undefined in a union of data types of the same typesize end > alignment? Any member written will result in a unique bit/byte pattern > in memory, whose reading may not make sense in a different type but > undoubtedly is well defined. In addition to the previously mentioned reasons, which I agree with, there used to be (maybe still are) machines that tag memory with the type stored. That makes it very difficult to access memory as bits of a different type. Some language standards are written to allow for those machines. Many languages originated before IEEE floating point, where there was no expectation that floating point values would agree between different machines. Even more, some have "trap" values in floating point, such that one can't reference some values. (VAX has a trap value for negative zero.) Since the language can't control all this, it is made undefined. (But otherwise, machine dependent.) JVM, while not using tags, is defined such that programs don't do that. The verifier is supposed to catch attempts, even if not executed, to access memory the wrong way. Among others, that allows for programs to be endian independent. (long takes twice as much memory as int, but by refusing such access, programs can't detect that, and so work on all hardware.) (Not that it is likely that there will be a C++ compiler for JVM.) [I think the Unisys Libra series may still run tagged Burroughs architecture code, but if so I doubt there was ever a C compiler. -John]
Back to comp.compilers | Previous | Next — Previous in thread | Next in thread | Find similar
Union C++ standard Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2021-11-25 11:11 +0100
Re: Union C++ standard Kaz Kylheku <480-992-1380@kylheku.com> - 2021-11-26 18:06 +0000
Re: Union C++ standard gah4 <gah4@u.washington.edu> - 2021-11-26 12:16 -0800
Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-27 16:59 +0100
Re: Union C++ standard Derek Jones <derek@NOSPAM-knosof.co.uk> - 2021-11-28 12:51 +0000
Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-28 19:00 +0100
Re: Union C++ standard Derek Jones <derek@NOSPAM-knosof.co.uk> - 2021-11-29 00:09 +0000
Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-29 21:00 +0100
Re: Union C++ standard Derek Jones <derek@NOSPAM-knosof.co.uk> - 2021-11-30 00:46 +0000
Re: Union C++ standard George Neuner <gneuner2@comcast.net> - 2021-11-30 17:18 -0500
Re: Union C++ standard terminology Derek Jones <derek@knosof.co.uk> - 2021-12-01 13:35 +0000
Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-30 23:24 +0100
Re: Union C++ standard Kaz Kylheku <480-992-1380@kylheku.com> - 2021-11-29 16:39 +0000
Re: Union C++ standard Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-29 14:32 -0800
csiph-web