Re: C/C++ memory-order compiled definitions?
Ira Baxter <idbaxter@semdesigns.com> wrote:
I don't really need a *specific* ordering of most
of the items. What I desperately need is a way
to group compiled entities into regions so that I
can tell that a pointer is making a reference into
that specific region.
There's a trick to achieve this. ATL uses it for its OBJECT_ENTRY_AUTO
macro (see in atlcom.h). It goes something like this:
// Create three "pseudosections". The linker will merge them into a
single section, in alphabetical order.
// Replace "Name" with something unique and meaningful in your
application.
#pragma section("Name$__a", read, shared)
#pragma section("Name$__z", read, shared)
#pragma section("Name$__m", read, shared)
// Place start and end markers into __a and __z subsections
__declspec(allocate("Name$__a")) MyStruct first;
__declspec(allocate("Name$__z")) MyStruct last;
// Place whatever data needs to go between first and last
__declspec(allocate("Name$__m")) MyStruct data1;
__declspec(allocate("Name$__m")) MyStruct data2;
These variable declarations may even be spread across different source
files, as it's the linker, not the compiler, that brings them together.
I don't think this trick would work on functions, though.
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925