Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 18 Aug 2005 15:53:48 +0300
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        Sergey Matveychuk <sem@freebsd.org>
Cc:        questions@freebsd.org
Subject:   Re: man malloc
Message-ID:  <20050818125348.GG1282@flame.pc>
In-Reply-To: <43044212.20909@FreeBSD.org>
References:  <4303A632.1000809@FreeBSD.org> <4303B016.3030201@mac.com> <43044212.20909@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2005-08-18 12:08, Sergey Matveychuk <sem@freebsd.org> wrote:
>Chuck Swiger wrote:
>>>What is pointer coercion? I have no pointer before malloc() returns.
>>
>> Right.  Well, malloc returns a (void *), but most people want to use the
>> memory malloc returns to hold their own arrays, structs, whatever, which
>> means that you need to be able to coerce the (void *) malloc gave you
>> into whatever pointer type you want to actually use.
>>
>> So the memory malloc gives you needs to be aligned so that it's OK to be
>> used for even the most restrictive datatype known to the system,
>> commonly 8, 16, or 32 bytes.
>
> Pointer coercion means a type cast? I see now.
> I read it as 'force change of pointer value' before.

It may be surprising, but casting back and forth *MAY* change the value
of the pointer.  Think of something like ``memory models'' in MS-DOS and
pointers that have both two parts, i.e. a segment address and an offset
in the segment.  Add to this a weird rule that says segment values are
shifted up by 8 bits and then added to the offset value, mix a compiler
that uses optimizations in the cocktail too, and you get strange things :-)




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050818125348.GG1282>