Archives


- Beowulf
- Beowulf Announce
- Scyld-users
- Beowulf on Debian

[Beowulf] Stroustrup regarding multicore

Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.

Search

Peter St. John peter.st.john at gmail.com
Tue Aug 26 12:00:50 PDT 2008


um, since array[i][j] is supposed to be the same as array (i * sizeof
(column declared length))[j], then I think yeah, the values should all be at
consecutive locations as Perry described. I just ran a similar experiment in
Visual Studio 2005, just what was on the box as I read this. I don't think
this is stated in ISO, but is logically consequent to stuff in ISO.
Peter

On 8/26/08, Lux, James P <james.p.lux at jpl.nasa.gov> wrote:
>
>
>
> -----Original Message-----
> From: beowulf-bounces at beowulf.org [mailto:beowulf-bounces at beowulf.org] On
> Behalf Of Perry E. Metzger
> Sent: Tuesday, August 26, 2008 8:06 AM
> To: Michael H. Frese
> Cc: Beowulf at beowulf.org
> Subject: Re: [Beowulf] Stroustrup regarding multicore
>
>
> "Michael H. Frese" <Michael.Frese at NumerEx-LLC.com> writes:
> > C is not much better.  I once worked a young computational programmer
> > for almost a week to get him to prove to himself that a C source
> > program couldn't walk through a 2-d array the hard way as fast as a
> > Fortran source program unless the stepping was coded by hand.
>
> I don't understand what that means. I've been programming in C for
> about 25 years, and I have known Fortran since the mid-1970s.
>
> > He didn't believe that a 2-d array in C is syntactically a 1-d array
> > of pointers to 1-d arrays,
>
> He was right. You are just plain wrong.
>
> char foo[10][10]
>
> allocates 100 consecutive addresses in memory.
>
> In case you don't believe me, try out the following program:
>
> ----------------------------------------------------------------------
> #include <stdio.h>
>
> char foo[10][10];
>
> int main(int argc, char **argv)
> {
>         int i, j;
>
>         for (i = 0; i < 10; i++)
>                 for (j = 0; j < 10; j++)
>                         printf("%d\n", &(foo[i][j]));
> }
> ----------------------------------------------------------------------
>
> It will print 100 consecutive integers, the addresses of the character
> array elements.
>
> > and the row pointers must be fetched from memory!
>
> I call bull. That's just totally false. You clearly don't know how C
> works.
>
>
> -----------------------------
> The example you give is going to be compiler dependent.  There's no
> requirement in K&R (I think.. some scum of the earth has apparently borrowed
> my copy, or it's buried under a pile of papers, so I can't check) that the
> rows be stored in contiguous memory.  In fact, relying on ANY particular
> interpretation of pointer values is dangerous. For all you know the compiler
> or runtime goes out and allocates noncontiguous chunks of memory for each
> and every element of the array.  Pointer arithmetic is deprecated.
>
> All that is guaranteed is that you can retrieve the successive elements of
> the array by successive values of the index.
>
> Jim Lux
>
>
> _______________________________________________
> Beowulf mailing list, Beowulf at beowulf.org
> To change your subscription (digest mode or unsubscribe) visit
> http://www.beowulf.org/mailman/listinfo/beowulf
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.scyld.com/pipermail/beowulf/attachments/20080826/62cf5b9a/attachment.html


More information about the Beowulf mailing list