![]() |
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| High Level Programming Post questions about C, C++, Java, SQL, and other programming languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| How to find Total and Free Physical Memory and Logical Memory in SOLARIS 9 | 0ktalmagik | SUN Solaris | 4 | 02-03-2009 09:37 AM |
| How can I get memory usage or anything that show memory used from sar file? | panithat | HP-UX | 1 | 03-31-2008 12:26 PM |
| Memory Alignment Problem on Sun Sparcs | nj302 | SUN Solaris | 1 | 09-21-2005 07:07 PM |
| Shared memory shortage but lots of unused memory | cjcamaro | UNIX for Advanced & Expert Users | 1 | 10-13-2004 05:10 PM |
| Total Memory/Swap Memory | ghe1 | Filesystems, Disks and Memory | 4 | 04-01-2002 10:33 AM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
||||
|
Hi, I try to marshal a unsigned int and a char * into a buffer, and then unmarshal them later to get them out. I need to put the char * in the front and unsigned int at the end of the buffer. However, my system always give me "BUS ERROR". I am using Sun Sparcs Sloris 2.10.
My code to marshal the data: unsigned dev = 111; unsigned inode = 222; int s_docname = strlen(docname) + 1; int s_key = s_docname + sizeof(unsigned) * 2; keybuf = malloc(s_key); memset(keybuf, 0, s_key); memcpy(keybuf, docname, s_docname); memcpy(keybuf + s_docname, &(dev), sizeof(unsigned)); memcpy(keybuf + s_docname + sizeof(unsigned), &(inode), sizeof(unsigned)); My code to unmarshal the data: char * docname = (char *)key.data; int s_docname = strlen(docname) + 1; dev =*((unsigned *)((char *)key.data + s_docname)); inode = *((unsigned *)((char *)key.data + s_docname + sizeof(unsigned))); I can print the dev and inode out in dbx debugger by typing the same code, but running the program always have the BUS error. I realize this is a problems of memory alignement. s_docname has byte granularity, somehow I need to "round up" my s_docname by some suitable calculation. But I really don't know how to? Help is appreciated. |
|
||||
|
Still I got same bus error. The problem is that the dev is not at the address where keybuff + s_docname is
Some processors are not able to load an integer, unsigned etc, from an address which is not a multiple of the size of that integer. For 4-byte integers, the address it is loaded from, looking at the lowest two bit only, must be 00. It is called 4-byte alignment. I need to "round up" my s_docname by some suitable calculation, leaving what is called 'padding' between docname and dev. I need some advice on how to round this up. Thanks a lot. |
|
||||
|
Problem solved. Thank you very much, Perderabo!
|
| Sponsored Links | ||
|
|
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|