Messages in this thread | | | Date | Tue, 6 May 2003 09:50:27 -0400 (EDT) | From | "Richard B. Johnson" <> | Subject | Re: shared objects, ELFs and memory usage |
| |
On Tue, 6 May 2003, Nir Livni wrote:
> Hi all, > If this is not the mailing list to ask this question - please let me know > where should I ask it. > > I have an executable whose size is almost 2MB, and it uses a shared object > that is almost 2MB. > when I run the process, I see (using "top") that the amount of "used memory" > raises with 4MB. (make sence...). the process seem to share 2MB ("shared" > column). > > When the process forks, it seems that the amount of "used memory" raises > with 4MB again. > > Does it mean the shared object is not really shared ? That doesn't make > sence... > > Help is appreciated. > Please CC me because I am not subscribed. > > Thanks, > Nir
If your shared object is truly a shared object, then it is shared. Use `strace` to trace the startup of your program. You should see it mmap() some portion of your shared object. You can also put a pause() in you program, then look at /proc/<PID>/maps and see what your program has memapped.
Note that merely linking some object files together does not create a shared object! You need to compile any 'C' code with the '-shared' parameter, and any assembly code needs to not use COMM variables. Then you need to link them as
ld -warn-common -O2 -shared -Map Shared.Map $(OBJS) -o $(SLIB)
...where OBJS is you list of object files, and SLIB is your new shared library.
You can inspect Shared.Map to see what is in the library. When you link against the shared library, you need to tell the linker where to find the runtime file, i.e., you need to use -rpath.
Cheers, Dick Johnson Penguin : Linux version 2.4.20 on an i686 machine (797.90 BogoMips). Why is the government concerned about the lunatic fringe? Think about it.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |