Review Request 122487: Reorder member variables to reduce memory usage.
Volker Krause
vkrause at kde.org
Mon Feb 9 17:12:01 UTC 2015
> On Feb. 8, 2015, 8:45 p.m., David Faure wrote:
> > Which magic tool did you come up with this time, to detect such things? :-)
>
> Aleix Pol Gonzalez wrote:
> +1 :D I too want to know!
It's still very much WIP, the code is in kde:scratch/vkrause/elf-dissector but be aware that it still generates arbitrarily wrong output, there's still many cases it's not detecting/handling correctly. And it'll likely crash if you are not on x86_64 with a full debug build.
- Volker
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/122487/#review75629
-----------------------------------------------------------
On Feb. 9, 2015, 5:04 p.m., Volker Krause wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/122487/
> -----------------------------------------------------------
>
> (Updated Feb. 9, 2015, 5:04 p.m.)
>
>
> Review request for KDE Frameworks.
>
>
> Repository: kcoreaddons
>
>
> Description
> -------
>
> The KJobPrivate one saves 24 bytes per instance, the others 8 bytes (on a 64 bit system).
>
>
> Diffs
> -----
>
> src/lib/io/kdirwatch_p.h f8cc2bcd5b9a8c65b409873ac78455fbb7db2405
> src/lib/jobs/kjob.cpp de3b8d7c8985dcc21ef9f52fba47361e9675f192
> src/lib/jobs/kjob_p.h 8bacefecc4dc8d2679a48b224837e0c01516d601
> src/lib/plugin/kpluginloader.cpp 64d7f0cec37ef51a76a3a60637822810cab398e6
>
> Diff: https://git.reviewboard.kde.org/r/122487/diff/
>
>
> Testing
> -------
>
> ```
> Struct "Entry (DW_TAG_class_type, offset 393887)" is sub-optimally packed: 74/88 bytes, 592/704 bits, optimal size is: 80 bytes
> class KDirWatchPrivate::Entry // location: /k/kde5/src/kcoreaddons/src/lib/io/kdirwatch_p.h:83
> {
> time_t m_ctime; // member offset: 0, size: 8, alignment: 8
> int m_nlink; // member offset: 8, size: 4, alignment: 4
> // 4 byte(s) padding
> ino_t m_ino; // member offset: 16, size: 8, alignment: 8
> entryStatus m_status; // member offset: 24, size: 4, alignment: 4
> entryMode m_mode; // member offset: 28, size: 4, alignment: 4
> bool isDir; // member offset: 32, size: 1, alignment: 1
> // 7 byte(s) padding
> QList<KDirWatchPrivate::Client*> m_clients; // member offset: 40, size: 8, alignment: 8
> QList<KDirWatchPrivate::Entry*> m_entries; // member offset: 48, size: 8, alignment: 8
> QString path; // member offset: 56, size: 8, alignment: 8
> int msecLeft; // member offset: 64, size: 4, alignment: 4
> int freq; // member offset: 68, size: 4, alignment: 4
> bool dirty; // member offset: 72, size: 1, alignment: 1
> // 3 byte(s) padding
> int wd; // member offset: 76, size: 4, alignment: 4
> QList<QString> m_pendingFileChanges; // member offset: 80, size: 8, alignment: 8
> }; // size: 88, alignment: 8
>
> Struct "KJobPrivate (DW_TAG_class_type, offset 1112242)" is sub-optimally packed: 95/120 bytes, 760/960 bits, optimal size is: 96 bytes
> class KJobPrivate // location: /k/kde5/src/kcoreaddons/src/lib/jobs/kjob_p.h:36
> {
> __vtbl_ptr_type* _vptr.KJobPrivate; // member offset: 0, size: 8, alignment: 8
> KJob* q_ptr; // member offset: 8, size: 8, alignment: 8
> KJobUiDelegate* uiDelegate; // member offset: 16, size: 8, alignment: 8
> int error; // member offset: 24, size: 4, alignment: 4
> // 4 byte(s) padding
> QString errorText; // member offset: 32, size: 8, alignment: 8
> Unit progressUnit; // member offset: 40, size: 4, alignment: 4
> // 4 byte(s) padding
> QMap<KJob::Unit, long long unsigned int> processedAmount; // member offset: 48, size: 8, alignment: 8
> QMap<KJob::Unit, long long unsigned int> totalAmount; // member offset: 56, size: 8, alignment: 8
> long unsigned int percentage; // member offset: 64, size: 8, alignment: 8
> bool suspended; // member offset: 72, size: 1, alignment: 1
> // 3 byte(s) padding
> Capabilities capabilities; // member offset: 76, size: 4, alignment: 4
> QTimer* speedTimer; // member offset: 80, size: 8, alignment: 8
> bool isAutoDelete; // member offset: 88, size: 1, alignment: 1
> // 7 byte(s) padding
> QEventLoop* eventLoop; // member offset: 96, size: 8, alignment: 8
> QEventLoopLocker eventLoopLocker; // member offset: 104, size: 8, alignment: 8
> bool isFinished; // member offset: 112, size: 1, alignment: 1
> // 7 byte(s) padding
> }; // size: 120, alignment: 8
>
> Struct "KPluginLoaderPrivate (DW_TAG_class_type, offset 1584914)" is sub-optimally packed: 37/48 bytes, 296/384 bits, optimal size is: 40 bytes
> class KPluginLoaderPrivate // location: /k/kde5/src/kcoreaddons/src/lib/plugin/kpluginloader.cpp:37
> {
> KPluginLoader* q_ptr; // member offset: 0, size: 8, alignment: 8
> QString const name; // member offset: 8, size: 8, alignment: 8
> quint32 pluginVersion; // member offset: 16, size: 4, alignment: 4
> // 4 byte(s) padding
> QString errorString; // member offset: 24, size: 8, alignment: 8
> bool pluginVersionResolved; // member offset: 32, size: 1, alignment: 1
> // 7 byte(s) padding
> QPluginLoader* loader; // member offset: 40, size: 8, alignment: 8
> }; // size: 48, alignment: 8
> ```
>
>
> Thanks,
>
> Volker Krause
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20150209/d4e6d8a0/attachment-0001.html>
More information about the Kde-frameworks-devel
mailing list