Thanks, sysctl.conf did the job.
The app is 64-bit and I use 1 large shared
memory segment because it needs to be contiguous.
BTW, I’ve had some trouble when my program
detaches and attaches an existing memory segment several times. After the 3rd
or 4th call to shmat(), it starts to fail using an address that
previously succeeded. I usually need to specify the address because my app
needs it to be 16 KB aligned and shmat() seems to return 4 KB aligned
addresses. To get around this, I keep rolling the address forward by 16 KB
until I find one that works.
Norm Green
From: Terry Lambert [mailto:email@hidden]
Sent: Thursday, January 03, 2008
8:49 PM
To: Norm Green
Cc: email@hidden
Subject: Re: calling sysctl at
startup - how?
You will probably not end up happy setting it to 2G, unless your
application is 64 bit and makes multiple segments adjacent to each other,
rather than 1 big segment, or you refuge the page 0 size to 4K in your 64 bit
app so that allocations can happen below the 4G boundary. 32 bit apps are
only going to find about 1.5G of contiguous address space available to them
because of frame buffers, framewoks, etc..
PS: My usual recommendation at this point is that you mmap() a file
instead to get your shared memory, if you need to avoid these limits. This has
the (usually desirable) side effect of creating persistent backing store for
the segment contents, as well.
-- Terry
On Jan 3, 2008, at 6:31 PM, Norm Green <email@hidden> wrote:
What is the
“right” way to run a sysctl command when the system boots up? I’ve read
that using the /etc/rc.* files is discouraged. I want to run this command
to enable large amounts of shared memory when the system boots:
sysctl -w
kern.sysv.shmmax=0x80000000 kern.sysv.shmseg=8 kern.sysv.shmall=0x80000000
Thanks,
Norm Green
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden