home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11618 < prev    next >
Encoding:
Internet Message Format  |  1992-07-26  |  2.3 KB

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!ucbvax!bloom-beacon!eru.mt.luth.se!lunic!sunic!aun.uninett.no!ugle.unit.no!sigyn.idt.unit.no!bjornmu
  2. From: bjornmu@idt.unit.no (Bj|rn P. Munch)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: Variable length records
  5. Message-ID: <1992Jul26.124915.14419@ugle.unit.no>
  6. Date: 26 Jul 92 12:49:15 GMT
  7. References: <24137@castle.ed.ac.uk> <rbjmzg-.gurgle@netcom.com> <1992Jul25.091702.15993@klaava.Helsinki.FI>
  8. Sender: news@ugle.unit.no (NetNews Administrator)
  9. Organization: Div. of CS & Telematics, Norwegian Institute of Technology
  10. Lines: 50
  11.  
  12. In article <1992Jul25.091702.15993@klaava.Helsinki.FI>, wirzeniu@klaava.Helsinki.FI (Lars Wirzenius) writes:
  13. |> gurgle@netcom.com (Pete Gontier) writes:
  14. |> >typedef struct
  15. |> >{
  16. |> >    short   count;
  17. |> >   float   data[ ];
  18. |> >}
  19. |> >foo;
  20. |> >
  21. |> >I refer to the second member as an "open array." Its behavior is this:
  22. |> >    o  it may appear only as the last member of a structure
  23. |> >    o  it does not contribute to the value returned by sizeof(foo)
  24. |> >   o  it may be addressed, of course, with an arbitrary index
  25. |> 
  26. |> Are there any particular reasons to not use
  27. |> 
  28. |>     typedef struct {
  29. |>         short count;
  30. |>         float data[1];
  31. |>     } foo;
  32. |> 
  33.  
  34. I was about to give the same comment.  I use a definition like the
  35. above myself.  The expression for the size you need to "malloc" gets
  36. more complex (as you need to subtract one), but I don't mind that.
  37.  
  38. |> (and similar over-allocation and using "too large" indexes) instead?
  39. |> This version only assumes that there won't be any problems for accessing
  40. |> elements outside the data array.
  41. |> 
  42. |> And, except for a minor gain in convenience for allocation and
  43. |> deallocation, is either of these preferable to
  44. |> 
  45. |>     typedef struct {
  46. |>         short count;
  47. |>         float *data;
  48. |>     } foo;
  49.  
  50. Even though the syntax for accessing the data will be the same, the
  51. use of this form will "cost" you one additional pointer dereferencing.
  52. If you use this structure a lot (as I do), it may make an (ok, rather
  53. small) difference to the performance.
  54.  
  55. (It may also cost an extra malloc to set up)
  56.  
  57. ---
  58. Bj|rn P. Munch               | Dept. of Comp. Science & Telematics,
  59. Bjoern.P.Munch@idt.unit.no   | Norwegian Institute of Technology (NTH),
  60. PhD Student                  | N-7034 Trondheim, Norway
  61.  (some filler words here)    | Fingerable addr:  bjornmu@multe.idt.unit.no
  62.