CHECKRAM estimate if RAM will fit a new array
checks that requested memory for the new array won't exceed AVAILABLE RAM with Matlab
This script is optimistic as Matlab won't always be able to create an array using ALL available RAM, but at least you know when you certainly CAN'T create an array without digging deep into swap or worse.
function [OK,newSizeBytes,freebytes] = checkRAM(newSize, myclass) arguments newSize (1,:) {mustBeNumeric} myclass {mustBeTextScalar} end % get available RAM freebytes = stdlib.ram_free(); limit_bytes = inf; % no limit set if ~stdlib.isoctave() % get user set preference for memory limit s = settings; ws = s.matlab.desktop.workspace; % Check if the maximum array size limit is enabled if ws.ArraySizeLimitEnabled.ActiveValue limit_bytes = double(ws.ArraySizeLimit.ActiveValue) / 100 * stdlib.ram_total(); end end limit_bytes = min(limit_bytes, freebytes); % variable sizing switch(myclass) case 'complex single', bits = 64; case 'complex double', bits = 128; case {'single','int32','uint32'}, bits = 32; case {'double','int64','uint64','float'}, bits = 64; case {'int16','uint16'}, bits = 16; case {'int8','uint8'}, bits = 8; case {'logical','bool'}, bits = 1; case {'string','char'}, bits = 8; otherwise, error('unhandled variable class: %s', myclass) end newSizeBytes = prod(newSize)*bits / 8; OK = newSizeBytes < limit_bytes; end %!assert(checkRAM([15,2,1], 'double'), true)