home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!noc.near.net!news.bbn.com!indian.bbn.com!langevin
- From: langevin@indian.bbn.com (Tim Langevin)
- Newsgroups: comp.std.c
- Subject: Memory alignment
- Date: 15 Sep 1992 16:27:26 GMT
- Organization: Bolt Beranek and Newman Inc., Cambridge MA
- Lines: 72
- Distribution: world
- Message-ID: <lbc3neINNtt@news.bbn.com>
- Reply-To: langevin@indian.bbn.com. (Tim Langevin)
- NNTP-Posting-Host: bbn.com
-
- I'd like the net.wisdom on this one...
-
- Is the following piece of code conforming ANSI C?
- Is there a better way to do this?
-
- Thanks,
-
- Tim Langevin
-
-
- **start here**
-
- #include <stddef.h>
- #include <stdlib.h>
-
- typedef union
- {
- enum { red, green, blue } a;
- signed char b;
- unsigned char c;
- short d;
- unsigned short e;
- int f;
- unsigned int g;
- long h;
- unsigned long i;
- float j;
- double k;
- long double l;
- char * m;
- } ALL_TYPES;
-
- typedef struct
- {
- size_t size;
- void *next;
- ALL_TYPES aligner;
- } HEADER;
-
- #define TEST_SIZE 20
-
- void *get_mem (size_t size);
- void free_mem (void * mem_ptr);
-
- int main (void)
- {
- void * mem_ptr;
- mem_ptr = get_mem (TEST_SIZE);
- free_mem (mem_ptr);
- return 0;
- }
-
- void *get_mem (size_t user_size)
- {
- void * mem_ptr;
- HEADER *header;
-
- mem_ptr = malloc (sizeof (HEADER) + user_size);
- header = (HEADER *) mem_ptr;
- header->size = user_size;
- header->next = 0;
-
- return (void *) ((char *)mem_ptr + sizeof(HEADER));
- }
-
- void free_mem (void * mem_ptr)
- {
- free ( (void *) ((char *) mem_ptr - sizeof (HEADER)));
- }
-
-
-
-