1 boolean = 4 bytes => 1 byte ?

classic Classic list List threaded Threaded
2 messages Options
Samuel GOUGEON Samuel GOUGEON
Reply | Threaded
Open this post in threaded view
|

1 boolean = 4 bytes => 1 byte ?

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
[hidden email]
http://lists.scilab.org/mailman/listinfo/dev
Clément David-3 Clément David-3
Reply | Threaded
Open this post in threaded view
|

Re: 1 boolean = 4 bytes => 1 byte ?

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
> [hidden email]
> http://lists.scilab.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[hidden email]
http://lists.scilab.org/mailman/listinfo/dev