[PD-dev] d_soundfile.c MAXBUFSIZE
Mathieu Bouchard
matju at artengine.ca
Tue Feb 28 13:41:17 CET 2006
On Tue, 28 Feb 2006, David Plans Casal wrote:
> #define MAXBUFSIZE 16777216 /* arbitrary; just don't want to hang malloc
> */
> I'm not sure about the 'hanging malloc' thing...
Maybe a better word than hanging would be flooding, as in taking too much
RAM. But there is another reason not stated, so it's not that arbitrary.
16777216, which is 2^24, is the last contiguous integer representable
in the float32 format. 16777217 (and following odd integers) get rounded
to the closest even integer. starting at 2^25 you only get multiples of 4
(which is 2^2) and so on. note that 2^25/2^2 = 2^23 which is the degree of
precision of float32.
This means that [tabread~] doesn't do what you want starting at 16777216;
it also means that [tabread4~] does exactly the same as [tabread~]
starting at 2^23=8388608, which is not what you want, and that appears
gradually, because between 2^22 and 2^23 you only have steps of 0.5,
between 2^21 and 2^22 you only have steps of 0.25, etc.
There are still some objects that can handle big arrays, so the limit
should be configurable at run time... but it's not.
> does it mean that enlarging that buffer size could screw with memory
> allocation because it we might 'run out'?
You're allowed to malloc something close to 2^30 bytes = 2^28 float32's in
one chunk if you have enough RAM. In 64-bit mode you would be able to
malloc more, but pd arrays don't work in 64-bit mode.
If Pd used float64 you wouldn't have problems with tabread~ because
float64 contains all integers up to 2^53. However Pd doesn't support
float64 yet, and once it does, you can't use float32 anymore, so all your
arrays will take double the RAM. To support multiple number formats
in signals would be quite a overhaul of Pd. To support them in arrays
only, would be easier but still quite a bit of work. (But then you would
be able to store your values in int16 format, which is half of the RAM of
float32!)
> AFAICT, 16777216 is about 6.3 minutes. If I need more like 26460000 (10m)
> allocation, could I just alter MAXBUFSIZE and recompile?
yes.
> Or is there a saner way of doing it, so that I don't end up with a
> 'custom' pd?
no... well, do you have an hex editor? ;-)
_ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
| Freelance Digital Arts Engineer, Montréal QC Canada
More information about the Pd-dev
mailing list