| delorie.com/archives/browse.cgi | search |
| X-Authentication-Warning: | delorie.com: mailnull set sender to djgpp-workers-bounces using -f |
| From: | sandmann AT clio DOT rice DOT edu (Charles Sandmann) |
| Message-Id: | <10202120441.AA22905@clio.rice.edu> |
| Subject: | Re: Alignment problem |
| To: | rudd AT cyberoptics DOT com |
| Date: | Mon, 11 Feb 2002 22:41:28 -0600 (CST) |
| Cc: | eliz AT is DOT elta DOT co DOT il, djgpp-workers AT delorie DOT com |
| In-Reply-To: | <3C684B4A.3AC31AA2@cyberoptics.com> from "Eric Rudd" at Feb 11, 2002 04:52:58 PM |
| X-Mailer: | ELM [version 2.5 PL2] |
| Mime-Version: | 1.0 |
| Reply-To: | djgpp-workers AT delorie DOT com |
| Errors-To: | nobody AT delorie DOT com |
| X-Mailing-List: | djgpp-workers AT delorie DOT com |
| X-Unsubscribes-To: | listserv AT delorie DOT com |
Here's a malloc.c patch vs 2.03 (not CVS - but should apply OK there
with a line number offset). It only gets called if you have a new
sbrk() block and it's unaligned - so normally no additional memory or
cpu overhead. Note: sbrk(1..7) bytes should always be internally
handled by sbrk() and not do any DPMI calls.
Note, I can't make it fail normally so I added some sbrk(1) and sbrk(4)
calls into a test program and malloc always returned 8 byte aligned.
*** malloc.c_ Wed Dec 5 14:52:52 2001
--- malloc.c Mon Feb 11 22:22:32 2002
*************** malloc(size_t size)
*** 208,215 ****
--- 208,222 ----
rv = (BLOCK *)((char *)rv - 4);
}
else
{
+ int align_bytes = (int)rv & (ALIGN-1);
+ if(align_bytes)
+ {
+ align_bytes = ALIGN - align_bytes;
+ if(sbrk(align_bytes) == (void *)((char *)rv + chunk_size) )
+ rv = (BLOCK *)((char *)rv + align_bytes);
+ }
expected_sbrk = (BLOCK *)((char *)rv + chunk_size);
#if DEBUG
printf(" disconnected sbrk\n");
#endif
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |