From owner-freebsd-questions@FreeBSD.ORG Thu Aug 18 12:48:07 2005 Return-Path: X-Original-To: questions@freebsd.org Delivered-To: freebsd-questions@FreeBSD.ORG Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 69A0B16A41F; Thu, 18 Aug 2005 12:48:07 +0000 (GMT) (envelope-from keramida@ceid.upatras.gr) Received: from rosebud.otenet.gr (rosebud.otenet.gr [195.170.0.94]) by mx1.FreeBSD.org (Postfix) with ESMTP id A602343D45; Thu, 18 Aug 2005 12:48:06 +0000 (GMT) (envelope-from keramida@ceid.upatras.gr) Received: from flame.pc (aris.bedc.ondsl.gr [62.103.39.226]) by rosebud.otenet.gr (8.13.4/8.13.4/Debian-1) with SMTP id j7ICm39V009758; Thu, 18 Aug 2005 15:48:04 +0300 Received: from flame.pc (flame [127.0.0.1]) by flame.pc (8.13.4/8.13.4) with ESMTP id j7ICrmKX002064; Thu, 18 Aug 2005 15:53:48 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost) by flame.pc (8.13.4/8.13.4/Submit) id j7ICrmX3002063; Thu, 18 Aug 2005 15:53:48 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Date: Thu, 18 Aug 2005 15:53:48 +0300 From: Giorgos Keramidas To: Sergey Matveychuk Message-ID: <20050818125348.GG1282@flame.pc> References: <4303A632.1000809@FreeBSD.org> <4303B016.3030201@mac.com> <43044212.20909@FreeBSD.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <43044212.20909@FreeBSD.org> Cc: questions@freebsd.org Subject: Re: man malloc X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Aug 2005 12:48:07 -0000 On 2005-08-18 12:08, Sergey Matveychuk 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 :-)