This is the mail archive of the mailing list for the libstdc++ project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: libstdc++/16612, empty basic_strings can't live in shared memory

Nathan Myers wrote:

On Thu, Aug 05, 2004 at 05:10:50PM -0700, Mark Mitchell wrote:

Nathan Myers wrote:

I like the idea of using static space in libsupc++. It's simpler,
and should improve performance of the plain vanilla string, too, by avoiding relocation indirections. Can anybody say whether it could be arranged for static storage in libsupc++ to appear at the same address in all programs compiled for a given ABI version?

It cannot be so arranged on some systems. For example, some systems allocate memory to shared objects based on link order, so unless libsupc++ is always the first library, one can't be sure it will end up at the same place. Also, if multiple libraries want to be loaded at the same address, the dynamic linker will have to pick one.

Perhaps I shouldn't have been so specific. Might there already be a block of 16 consecutive const (ideally, read-only) zero bytes in crt1.o, or crti.o, or crtbegin.o at (a fixed offset from) an exported symbol? Might such a block be added to (e.g.) crtbegin.o? There might be plenty of other uses for such a thing besides std::string.

I don't think that the need for a fixed address in all programs is in any way universal. I suspect that on most architectures, even where it's not guaranteed, there would be a way to arrange to get a common address, somehow, for (the few) programs that need it. Other programs would benefit just from the faster access to a non-relocated symbol.

I'm not enough of an expert to say for sure about these things. Do you need the memory to be shared across cooperating processes, or just allocated at the same address in all cooperating processes? If it's read-only, I'm guessing the latter. In that case, you could probably also use mmap, requesting a particular address. That will not work in the fully general case, but it might well be possible to make it work reliably on any given system by picking appropriate addresses. You might also just be able to place an ELF section full of zeros in the executable with a fixed load address.

Mark Mitchell
CodeSourcery, LLC
(916) 791-8304

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]