[Scilab-Dev] 1 boolean = 4 bytes => 1 byte ?

Clément David Clement.David at esi-group.com
Tue May 22 11:12:50 CEST 2018


Hello Samuel,

After some diving into the ast/types source code and debugging session I got some information :

 --> disp(%t)
    // gdb resolved the value as a <types::ArrayOf<int>> where m_iSize = 1
    // (the size of the inner m_pRealData)
 --> disp([%t %f %t %f])
    // gdb resolved the value as a <types::ArrayOf<int>> where m_iSize = 4
    // (the size of the inner m_pRealData)

So in Scilab 6, there is 4 byte per boolean; to me a first thing to do before changing the current
implementation is to let `who()` return both the memory used (including the Scilab header) and the
memory used by the inner data storage.

Note: as discussed in this ML, the overhead per for Scilab datatype (not inner value) is 208 byte
per value, to me it is more important to reduce it first as it will impact all ArrayOf based
datatype.

Thanks,

--
Clément

Le lundi 23 avril 2018 à 18:25 +0200, Samuel Gougeon a écrit :
> Hello,
> As reported  @ http://bugzilla.scilab.org/12789 in 2013 (so 2 years before the first 6.0 alpha
> release), in Scilab 5 each boolean takes 4 bytes to be stored.
> It is 4 times more than an easy storage and handling with 1 byte per boolean, and 32 times more
> than a memory optimum with 8 booleans per byte.
> 
> Since [names, memory]=who(..) is broken in Scilab 6, i did not check that this poor memory usage
> is still actual in 6.0.
> 
> Assuming that it is the case, then, what would imply to change the storage -- say with 1 byte per
> boolean --
> in terms of implementation : would it be heavy to implement?
> in terms of back-compatibility : would it have a big impact?
> Regards
> Samuel
> _______________________________________________
> dev mailing list
> dev at lists.scilab.org
> http://lists.scilab.org/mailman/listinfo/dev


More information about the dev mailing list