Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | James Kuyper <jameskuyper@verizon.net> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: multidimensional heap arrays |
| Date | 2011-04-25 22:57 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <ip5cb9$k3a$1@dont-email.me> (permalink) |
| References | <ip4if6$hhk$1@speranza.aioe.org> |
On 04/25/2011 03:36 PM, Jack Boot wrote: > hi > > we have been discussing methods for multidimensional heap arrays, between > us we have 3 preferred approaches > > 1: array of pointers each mallocated, ie > int ** A = malloc(nrow * sizeof(int*)); > for(i=0;i<nrow;i++) A[i]=malloc(ncol * sizeof(int)); I've used this approach before. It's particularly useful when the rows of the array have different lengths, and in a triangular matrix. With careful attention to how you access such a matrix, you can avoid storing all of the useless zero elements. > 2: array of pointers set into one big mallocated array, ie > int ** A = malloc(nrow * sizeof(int*)); > int * Astorage = malloc(nrow * ncol * sizeof(int)); > for(i=0;i<nrow;i++) A[i]=Astorage+i*ncol; I've used something like this approach before, but I don't like it. I used it because I was trying to reverse-engineer some routines from a commercial third-party library (I told my boss I wanted to get advice from a corporate lawyer before I tackled this project - he told me to just get on with it, and not worry about such issues. I filled the code with comments documenting which library my code was emulating, as well as exactly how I determine what the functions should do without disassembling it or stealing the original source code. I hope that was sufficient to avoid legal problems.) One of these routines created a dynamically-allocated structure filled with pointers to arrays of several different dimensions, whose length in each dimension was variable, and stored in that structure. My black-box testing determined that it was using something like the following method: it allocated a single block of memory big enough to store the structure and all of the arrays it contained pointers to. The arrays were not merely of several different sizes, but even of several different dimensions. The routine filled in the pointers in that structure with values pointing at various parts of that single big allocation. I perforce followed the same approach in my own reverse-engineered code. I can see the advantages of such an approach, but it strikes me as a delicate system, easily broken if a single pointer gets set incorrectly during an update. > 3: one big mallocated array, no separate row pointers but an accessor > macro instead, ie > int * Astorage = malloc(nrow * ncol * sizeof(int)); > #define A(i,j) Astorage[i*ncol+j]; > > what is your opinion of these methods? what situations is one is better > than another? should some of them never be used? what is standard/best > practice? I'd replace the accessor macro with an inline function, if only for type safety. Otherwise, this is another reasonable approach. -- James Kuyper
Back to comp.lang.c | Previous | Next — Previous in thread | Find similar | Unroll thread
multidimensional heap arrays Jack Boot <jackboot@mailinator.com> - 2011-04-25 19:36 +0000
Re: multidimensional heap arrays Francois Grieu <fgrieu@gmail.com> - 2011-04-25 23:16 +0200
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-25 22:35 +0100
Re: multidimensional heap arrays Anand Hariharan <mailto.anand.hariharan@gmail.com> - 2011-04-25 21:19 -0700
Re: multidimensional heap arrays Francois Grieu <fgrieu@gmail.com> - 2011-04-26 08:19 +0200
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-26 12:19 +0100
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-26 23:25 +1200
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-26 21:06 +0100
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 08:59 +1200
Re: multidimensional heap arrays Keith Thompson <kst-u@mib.org> - 2011-04-26 14:39 -0700
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 10:03 +1200
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-26 23:41 +0100
Re: multidimensional heap arrays Keith Thompson <kst-u@mib.org> - 2011-04-26 16:33 -0700
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-27 04:05 +0100
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-26 22:49 +0100
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 10:19 +1200
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-27 00:38 +0100
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 11:48 +1200
Re: multidimensional heap arrays Keith Thompson <kst-u@mib.org> - 2011-04-26 17:38 -0700
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 13:08 +1200
Re: multidimensional heap arrays Tim Rentsch <txr@alumni.caltech.edu> - 2011-04-26 18:31 -0700
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 14:01 +1200
Re: multidimensional heap arrays Tim Rentsch <txr@alumni.caltech.edu> - 2011-04-27 00:04 -0700
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 19:58 +1200
Re: multidimensional heap arrays Ian Collins <ian-news@hotmail.com> - 2011-04-27 20:03 +1200
Re: multidimensional heap arrays Keith Thompson <kst-u@mib.org> - 2011-04-27 00:03 -0700
Re: multidimensional heap arrays Tim Rentsch <txr@alumni.caltech.edu> - 2011-04-26 18:20 -0700
Re: multidimensional heap arrays Ben Bacarisse <ben.usenet@bsb.me.uk> - 2011-04-27 03:59 +0100
Re: multidimensional heap arrays Tim Rentsch <txr@alumni.caltech.edu> - 2011-04-27 00:24 -0700
Re: multidimensional heap arrays "io_x" <a@b.c.invalid> - 2011-04-26 09:42 +0200
Re: multidimensional heap arrays Eric Sosman <esosman@ieee-dot-org.invalid> - 2011-04-25 20:50 -0400
Re: multidimensional heap arrays James Kuyper <jameskuyper@verizon.net> - 2011-04-25 22:57 -0400
csiph-web