mein System:
Qt: 3.3.7 Embedded
System: Linux 2.6.9
Architektur: arm
ROM: 16 MB
RAM: 32 MB
CPU: ARM9 192 MHZ
Ich habe eine Applikation geschrieben welche im Embedded Bereich zum Einsatz kommt. Da mein Zielsystem Hardware technisch sehr schwach ausgerüstet ist muss meine Applikation mit den Ressourcen schonend umgehen. Mir stehen lediglich 32 MB Arbeitsspeicher zur Verfügung von denen ich effektiv maximal 15 MB nutzen kann. Meine Applikationen nutzt keine Gui-Elemente.
Folgende Anpassung zwecks Performance wurden bereits getätigt:
* statisches Linken der Qt Bibliothek
* Nicht benötigte QT-Module beim kompilieren der QT Bibliothek verwerfen
Code: Alles auswählen
Configure Parameter:
./configure -qconfig moxa -thread -embedded arm -nomake demos -nomake examples -no-zlib -little-endian -static -no-cups -no-libjpeg -no-freetype -no-libmng -no-libpng -nomake tools -no-imgfmt-mng -no-imgfmt-jpeg
QConfig-Einstellungen:
//#ifndef QT_NO_CHECK
//# define QT_NO_CHECK
//#endif
#define QT_NO_PROCESS
#define QT_NO_PALETTE
#define QT_NO_ACTION
#define QT_NO_TRANSLATION
#define QT_NO_MIME
#define QT_NO_SOUND
#define QT_NO_QWS_CURSOR
#define QT_NO_QWS_DEPTH_8GRAYSCALE
#define QT_NO_QWS_DEPTH_8
#define QT_NO_QWS_DEPTH_15
#define QT_NO_QWS_DEPTH_16
#define QT_NO_QWS_DEPTH_32
#define QT_NO_IMAGEIO_BMP
#define QT_NO_IMAGEIO_PPM
#define QT_NO_IMAGEIO_XBM
#define QT_NO_IMAGEIO_XPM
#define QT_NO_ASYNC_IMAGE_IO
#define QT_NO_MOVIE
#define QT_NO_TRUETYPE
#define QT_NO_BDF
//#define QT_NO_FONTDATABASE
#define QT_NO_RICHTEXT
#define QT_NO_DRAGANDDROP
#define QT_NO_CLIPBOARD
#define QT_NO_QWS_CURSOR
#define QT_NO_CURSOR
#define QT_NO_QWS_GFX_SPEED
#define QT_NO_COLORNAMES
#define QT_NO_TRANSFORMATIONS
#define QT_NO_PRINTER
#define QT_NO_PSPRINTER
#define QT_NO_PICTUpsRE
#define QT_NO_PICTURE
#define QT_NO_LAYOUT
#define QT_NO_DRAWUTIL
#define QT_NO_IMAGE_TRUECOLOR
#define QT_NO_IMAGE_SMOOTHSCALE
#define QT_NO_IMAGE_TEXT
#define QT_NO_QWS_MANAGER
#define QT_NO_TEMPLATE_VARIANT
#define QT_NO_QWS_KEYBOARD
#define QT_NO_SYNTAXHIGHLIGHTER
#define QT_NO_ACCEL
#define QT_NO_BUTTON
#define QT_NO_DIALOG
#define QT_NO_FRAME
#define QT_NO_SEMIMODAL
#define QT_NO_STYLE
#define QT_NO_EFFECTS
#define QT_NO_COP
#define QT_NO_SQL
#define QT_NO_IMAGEIO
#define QT_NO_NETWORKPROTOCOL
#define QT_NO_NETWORKPROTOCOL_FTP
#define QT_NO_NETWORKPROTOCOL_HTTP
#define QT_NO_IMAGE_DITHER_TO_1
#define QT_NO_IMAGE_HEURISTIC_MASK
#define QT_NO_IMAGE_MIRROR
#define QT_NO_DIRECTPAINTER
#define QT_NO_DIALOGS
#define QT_NO_WIDGETS
#define QT_NO_SPLITTER
#define QT_NO_STATUSBAR
#define QT_NO_TABBAR
#define QT_NO_TOOLBAR
#define QT_NO_TOOLTIP
#define QT_NO_VALIDATOR
#define QT_NO_WHATSTHIS
#define QT_NO_WIDGETSTACK
#define QT_NO_SIZEGRIP
#define QT_NO_HEADER
#define QT_NO_WORKSPACE
#define QT_NO_LCDNUMBER
#define QT_NO_STYLE_MOTIF
#define QT_NO_STYLE_PLATINUM
#define QT_NO_PROGRESSBAR
#define QT_NO_MENUDATA
Meine Applikation hat drei Threads. Der erste wertet Rs232 Signale aus, der zweite Kommuniziert über eine socket Verbindung und der dritte sorgt für einen FTP-Upload zusätzlich natürlich noch der Main-Thread... Mein Arbeitsspeicherverbrauch liegt derzeit bei ca. 14 MB wobei ich nicht nachvollziehen kann was da so groß sein soll. Mit "pmap" ein Linux-Tool kann man sich Informationen über den Prozess Arbeitsspeicher anzeigen lassen. Hierbei verbrauchen die Bibliotheken unter 4 MB jedoch der Eintrag [anon] über 9 MB.. [anon] sagt natürlich nicht viel aus vermute mal das wird der Stack etc.. sein
Hat jemand eine Idee wie ich meinen Arbeitsspeicherverbrauch weiter senken kann und ob der derzeite verbrauch normal ist?
[EDIT]: ich habe mir mal genauer den Prozess meiner Applikation angesehen. Unter Linux /proc/PID kann man sich zu dem jeweiligen Prozess alle möglichen Daten ausgeben lassen. Mir ist dabei aufgefallen das auf dem Embedded Gerät vier Prozesse laufen und auf dem Entwicklungsrechner nur ein Prozess läuft meiner Software. Die Gesamtgröße des Programmes in Seiten pro Prozess beträgt auf dem embedded Gerät ca. 3 MB *4 Prozesse = 12 MB Arbeitsspeicher verbrauch. Kann mir jemand erklären wie es zu diesem Ergebnis kommt? Wird wirklich für jeden Thread das komplette Programm im Speicher gehalten?
Gruß Alex