On Wed, Nov 18, 2009 at 1:21 AM, Barry Smith <bsmith at mcs.anl.gov> wrote: > > ?When starting to code PETSc 2.0 I introduced two nasty habits > > 1) since we called malloc() directly and some mallocs don't like allocating > zero length I would often allocate 1 additional space to make sure I did not > request a zero size. Giving things like > PetscMalloc((n+1)*sizeof(something),&something); This leads to confusing > code because we don't know when the 1 belongs or not. > > 2) in order to reduce the number of mallocs I would do a single malloc for > several variables. For example, > PetscMalloc((n+m+1)*sizeof(PetscScalar),&buf1); buf2 = buf1 + n; > > ?Later I changed PetscMalloc()/Free() to allow 0 length mallocs. I also > introduced PetscMalloc2-3-4-5() to efficiently and cleanly share one malloc. > Thus 1 and 2 became unnecessary. Since they are downright disgusting I am > trying to eliminate 2) and would like also to reduce 1) > > ?This fixes will likely introduce some hard to determine bugs in the near > future (or already have). Please avoid habits 1 and 2 from now on in the > PETSc code base. >
I would guess that almost all the (n+1) mallocs are unnecessary, except for "I"-like arrays associated to AIJ structures... -- Lisandro Dalc?n --------------- Centro Internacional de M?todos Computacionales en Ingenier?a (CIMEC) Instituto de Desarrollo Tecnol?gico para la Industria Qu?mica (INTEC) Consejo Nacional de Investigaciones Cient?ficas y T?cnicas (CONICET) PTLC - G?emes 3450, (3000) Santa Fe, Argentina Tel/Fax: +54-(0)342-451.1594
