From: "Richard B. Johnson" <root@chaos.analogic.com>
To: "Ihar 'Philips' Filipau" <filia@softhome.net>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: 2.2/2.4/2.6 VMs: do malloc() ever return NULL?
Date: Wed, 26 Nov 2003 08:49:02 -0500 (EST) [thread overview]
Message-ID: <Pine.LNX.4.53.0311260829340.9730@chaos> (raw)
In-Reply-To: <3FC4A8BA.9070907@softhome.net>
On Wed, 26 Nov 2003, Ihar 'Philips' Filipau wrote:
> Richard B. Johnson wrote:
> >
> >> May I ask you one question? Did you were ever doing once graceful
> >>failure of application under memory pressure? Looks like not.
> >>
> >
> > Yes. I'm in the business of making embedded systems that cannot
> > fail. And they do not fail. They allocate memory once during
> > startup and they never fail or exit. They also do not use malloc()
> > but that's not an issue.
> >
>
> So what do you use then in user space to reliably allocate memory?
>
> As to me - memory is a resource. Is it virtual or is it physical - it
> is still resource. And I need to allocate part of this resource.
>
> malloc() uses brk() inside. But brk() is "implementation details". I
> honestly do not care about them - I just want to be sure that what ever
> resource I have allocated - I can use it afterwards until I shall free
> it. POSIX even doesn't mention brk() BTW.
>
> If you can hint me any other method to allocate memory without
> surprises - I will really appreciate.
>
Here is a dynamic allocation scheme that doesn't fail with
the usual, i.e., less that 1/2 megabyte temporary storage. It
also automatically frees the RAM it's allocated.
int function(void *what, size_t len)
{
char tmp[len];
;;;;;
return 0;
}
The additional pointer math is wasteful of time. You can just
do:
int function(void *what, size_t len)
{
char tmp[0x00100000];
}
... and be done with it. That just subtracts 0x00100000 from the
stack-pointer. Simple, quick. Your access should check against
sizeof(tmp).
If you need really large buffers and have only a single
thread, you can still allocate memory at compile-time, i.e.,
char scratch[0x10000000];
Any single-threaded function can use that scratch space.
Note that since scratch[] was not initialized by the compiler
it is put in the ".bss" segment and initialized to zero
when the program is loaded. Therefore, at least when the
program was started, there was sufficient virtual RAM to
allow the entire buffer to be written.
>
> Embedded? with swap?!?
> What you have smoken?! - take me to your dealer!-)))
>
Absolutely. A RAM-Disk on non-paged RAM. It allows individual
tasks to keep track of a valuable resource with minimum
overhead. It would be nicer if there was a "get free pages"
function call but you can make a driver for a virtual device
that returns such information. Then you don't need the
RAM disk to keep track of virtual memory
Cheers,
Dick Johnson
Penguin : Linux version 2.4.22 on an i686 machine (797.90 BogoMips).
Note 96.31% of all statistics are fiction.
next prev parent reply other threads:[~2003-11-26 13:47 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-25 13:27 Ihar 'Philips' Filipau
2003-11-25 14:00 ` Arjan van de Ven
2003-11-25 16:58 ` Rik van Riel
2003-11-25 19:03 ` Ihar 'Philips' Filipau
2003-11-25 19:24 ` Rik van Riel
2003-11-25 19:28 ` Chris Wright
2003-11-25 20:17 ` Richard B. Johnson
2003-11-25 23:17 ` Ihar 'Philips' Filipau
2003-11-25 23:40 ` Oliver
2003-11-26 13:06 ` Richard B. Johnson
2003-11-26 13:20 ` Ihar 'Philips' Filipau
2003-11-26 13:27 ` William Lee Irwin III
2003-11-26 14:33 ` Ihar 'Philips' Filipau
2003-11-26 14:36 ` William Lee Irwin III
2003-11-26 13:49 ` Richard B. Johnson [this message]
2003-11-26 14:39 ` Ihar 'Philips' Filipau
2003-11-26 7:31 ` Tim Connors
2003-11-26 9:58 ` William Lee Irwin III
[not found] <VLAm.2g1.9@gated-at.bofh.it>
[not found] ` <VM3n.3jY.9@gated-at.bofh.it>
2003-11-25 15:23 ` Ihar 'Philips' Filipau
[not found] <VQJL.62Q.11@gated-at.bofh.it>
[not found] ` <VR3c.6Ns.21@gated-at.bofh.it>
2003-11-26 10:30 ` Ihar 'Philips' Filipau
2003-11-26 10:39 ` William Lee Irwin III
2003-11-26 12:14 ` Ihar 'Philips' Filipau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.53.0311260829340.9730@chaos \
--to=root@chaos.analogic.com \
--cc=filia@softhome.net \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®