Pelles C forum
C language => Beginner questions => Topic started by: Grincheux on July 21, 2020, 01:59:40 PM
-
When I compile using Debug minimize size that's OK
When I compile using maximize speed (always in debug mode) the result is wrong.
See colums header.
If I compile in release, all is wrong too...
(https://www.mediafire.com/convkey/dd90/ufq53nibm31mu4h6g.jpg)
(https://www.mediafire.com/convkey/f8ef/l51ywioity9fuwz6g.jpg)
(https://www.mediafire.com/convkey/61e1/etbjzh87eyf4zml6g.jpg)
(http://www.mediafire.com/view/2p67217fr4ingg9/b4.jpg/file)
static void Wnd01_OnCreate(HWND __hWnd)
{
alignas(HANDLE) LVCOLUMNA _Lvc ;
alignas(HANDLE) WORKDATAS _Work ;
alignas(HANDLE) LPSTR _lpszTmp ;
alignas(int) char _szTmp[1024] ;
hListView_w1 = CreateWindowExA(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_SORTASCENDING,
0,0,0,0,__hWnd,NULL,hInstance,NULL) ;
ListView_SetExtendedListViewStyle(hListView_w1,LVS_EX_DOUBLEBUFFER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) ;
SendMessage(hListView_w1,WM_SETFONT,(WPARAM) hMainFont,TRUE) ;
ZeroMemory(&_Lvc,sizeof(LVCOLUMNA)) ;
_lpszTmp = _szTmp ;
_Lvc.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_FMT ;
_Lvc.fmt = LVCFMT_CENTER ;
_Lvc.cx = 80 ;
_Lvc.pszText = "SPK-ID" ;
ListView_InsertColumn(hListView_w1,0,&_Lvc) ;
ListView_InsertColumn(hListView_w1,1,&_Lvc) ;
_Lvc.cx = 140 ;
_Lvc.pszText = _szTmp ;
Message_Get(24,_lpszTmp,sizeof(_szTmp)) ;
ListView_InsertColumn(hListView_w1,2,&_Lvc) ;
_Lvc.cx = 70 ;
_Lvc.pszText = "ACP" ;
ListView_InsertColumn(hListView_w1,3,&_Lvc) ;
_Lvc.cx = 60 ;
_Lvc.pszText = "OVE" ;
ListView_InsertColumn(hListView_w1,4,&_Lvc) ;
_Lvc.cx = 50 ;
Message_Get(25,_lpszTmp,sizeof(_szTmp)) ;
_Lvc.pszText = _szTmp ;
ListView_InsertColumn(hListView_w1,5,&_Lvc) ;
_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;
ListView_InsertColumn(hListView_w1,6,&_Lvc) ;
_Lvc.pszText = "PHA" ;
ListView_InsertColumn(hListView_w1,7,&_Lvc) ;
// e, a, q, i, om, w, ma, ad, n, per, per_y, moid, class
// e = Eccentricity
// a = Semi-major axis (au)
// q =
// i = Inclination of orbit plane (DEG)
// om = Longitude of Ascending Node (DEG)
// w = Argument of Perihelion (DEG)
// ma = Mean anomaly (DEG)
// ad = Aphelion distance (au)
// n = Mean motion (DEG/DAY)
// per = Orbital period (DAYS)
// per_y = Orbital period (YRS)
// moid = Distance minimale d'intersection d'une orbite
// class = Classe d'orbite
_Lvc.fmt = LVCFMT_RIGHT ;
_Lvc.cx = 90 ;
_Lvc.pszText = "e" ;
ListView_InsertColumn(hListView_w1,8,&_Lvc) ;
_Lvc.pszText = "a" ;
_Lvc.cx = 135 ;
ListView_InsertColumn(hListView_w1,9,&_Lvc) ;
_Lvc.pszText = "q" ;
ListView_InsertColumn(hListView_w1,10,&_Lvc) ;
_Lvc.pszText = "i" ;
_Lvc.cx = 90 ;
ListView_InsertColumn(hListView_w1,11,&_Lvc) ;
_Lvc.pszText = "om" ;
ListView_InsertColumn(hListView_w1,12,&_Lvc) ;
_Lvc.pszText = "w" ;
ListView_InsertColumn(hListView_w1,13,&_Lvc) ;
_Lvc.pszText = "ma" ;
ListView_InsertColumn(hListView_w1,14,&_Lvc) ;
_Lvc.pszText = "ad" ;
_Lvc.cx = 135 ;
ListView_InsertColumn(hListView_w1,15,&_Lvc) ;
_Lvc.pszText = "n" ;
_Lvc.cx = 90 ;
ListView_InsertColumn(hListView_w1,16,&_Lvc) ;
_Lvc.pszText = "per_d" ;
ListView_InsertColumn(hListView_w1,17,&_Lvc) ;
_Lvc.pszText = "per_y" ;
ListView_InsertColumn(hListView_w1,18,&_Lvc) ;
_Lvc.pszText = "MOID" ;
ListView_InsertColumn(hListView_w1,19,&_Lvc) ;
ListView_DeleteColumn(hListView_w1,0) ;
// On affiche aussi bien les astéroïdes que les comètes et les planètes
// Au départ on affiche les asteroïdes sans différienciation Observer, Vectors et Elements
// On vérifie simplement que les fichiers existent
memset(&_Work,0,sizeof(WORKDATAS)) ;
sqlite3_exec(hWorkDataBase,szEmptyWorkTable,0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"BEGIN TRANSACTION",0,0,NULL) ;
Filtre_000(__hWnd,&_Work) ;
sqlite3_exec(hWorkDataBase,"END TRANSACTION",0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"VACUUM",0,0,NULL) ;
So I need help
-
Hi Grincheux,
Are you using RC3? There was a bug fix in RC3 that fixed a optimize speed issue I ran into with prior release candidates.
Pelle also suggested that I try
#pragma pack_stack(off)
before the fix was implemented - maybe it will help your situation.
Hope this helps,
John Z
-
I downloaded RC3 and applied #pragma pack_stack(off) but the problem continue...
When I don't apply any optimisations it is good.
Thank You John
-
Hi Grincheux,
It does look like pointer confusion. You might try adding a message box for troubleshooting like:
_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;
MessageBoxA(__hWnd,_Lvc.pszText,"Should be NEA",MB_OK);
ListView_InsertColumn(hListView_w1,6,&_Lvc) ;
Also you can insert #pragma optimize(none) just before "static void Wnd01_OnCreate(HWND __hWnd)"
to selectively turn off then
#pragma optimize(time) just after the procedure closing } to resume optimization - this is just to verify that the issue is totally within this procedure. Also gives a way to optimize everything else for speed while this procedure is not.
Another possibility would be to set the pointer _Lvc.pszText to NULL between uses which may help the compiler de-confuse itself ……
On the code that was shown I did not see any thing that appeared to be a coding error.
Are you compiling with Level 2 warnings ? - you didn't show the top Compiler page options.
Of course this is all troubleshooting or avoidance -
Hope this can help, but I don't have the solution/answer....
John Z
-
Try these *temporary* changes:
alignas(HANDLE) LVCOLUMNA _Lvc; => volatile alignas(HANDLE) LVCOLUMNA _Lvc; // Add volatile
ZeroMemory(&_Lvc, sizeof(LVCOLUMNA)); => ZeroMemory((void*)&_Lvc, sizeof(LVCOLUMNA)); // Add (void*) to cast away volatile complains (I think this is the only place...)
( A shortcut, trying to speed up the usage of alias information, misses some cases of &_Lvc -- drowning in a sea of casts to make Windows happy/me unhappy.)
-
Thank Mr Pelle
I added your changes and it WORKS!
static void Wnd01_OnCreate(HWND __hWnd)
{
volatile alignas(HANDLE) LVCOLUMNA _Lvc ;
alignas(HANDLE) WORKDATAS _Work ;
alignas(HANDLE) LPSTR _lpszTmp ;
alignas(int) char _szTmp[1024] ;
hListView_w1 = CreateWindowExA(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_SORTASCENDING,
0,0,0,0,__hWnd,NULL,hInstance,NULL) ;
ListView_SetExtendedListViewStyle(hListView_w1,LVS_EX_DOUBLEBUFFER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) ;
SendMessage(hListView_w1,WM_SETFONT,(WPARAM) hMainFont,TRUE) ;
ZeroMemory((void *) &_Lvc,sizeof(LVCOLUMNA)) ;
_lpszTmp = _szTmp ;
_Lvc.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_FMT ;
_Lvc.fmt = LVCFMT_CENTER ;
_Lvc.cx = 80 ;
_Lvc.pszText = "SPK-ID" ;
ListView_InsertColumn(hListView_w1,0,&_Lvc) ;
ListView_InsertColumn(hListView_w1,1,&_Lvc) ;
_Lvc.cx = 140 ;
_Lvc.pszText = _szTmp ;
Message_Get(24,_lpszTmp,sizeof(_szTmp)) ;
ListView_InsertColumn(hListView_w1,2,&_Lvc) ;
_Lvc.cx = 70 ;
_Lvc.pszText = "ACP" ;
ListView_InsertColumn(hListView_w1,3,&_Lvc) ;
_Lvc.cx = 60 ;
_Lvc.pszText = "OVE" ;
ListView_InsertColumn(hListView_w1,4,&_Lvc) ;
_Lvc.cx = 50 ;
Message_Get(25,_lpszTmp,sizeof(_szTmp)) ;
_Lvc.pszText = _szTmp ;
ListView_InsertColumn(hListView_w1,5,&_Lvc) ;
_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;
ListView_InsertColumn(hListView_w1,6,&_Lvc) ;
_Lvc.pszText = "PHA" ;
ListView_InsertColumn(hListView_w1,7,&_Lvc) ;
// e, a, q, i, om, w, ma, ad, n, per, per_y, moid, class
// e = Eccentricity
// a = Semi-major axis (au)
// q =
// i = Inclination of orbit plane (DEG)
// om = Longitude of Ascending Node (DEG)
// w = Argument of Perihelion (DEG)
// ma = Mean anomaly (DEG)
// ad = Aphelion distance (au)
// n = Mean motion (DEG/DAY)
// per = Orbital period (DAYS)
// per_y = Orbital period (YRS)
// moid = Distance minimale d'intersection d'une orbite
// class = Classe d'orbite
_Lvc.fmt = LVCFMT_RIGHT ;
_Lvc.cx = 90 ;
_Lvc.pszText = "e" ;
ListView_InsertColumn(hListView_w1,8,&_Lvc) ;
_Lvc.pszText = "a" ;
_Lvc.cx = 135 ;
ListView_InsertColumn(hListView_w1,9,&_Lvc) ;
_Lvc.pszText = "q" ;
ListView_InsertColumn(hListView_w1,10,&_Lvc) ;
_Lvc.pszText = "i" ;
_Lvc.cx = 90 ;
ListView_InsertColumn(hListView_w1,11,&_Lvc) ;
_Lvc.pszText = "om" ;
ListView_InsertColumn(hListView_w1,12,&_Lvc) ;
_Lvc.pszText = "w" ;
ListView_InsertColumn(hListView_w1,13,&_Lvc) ;
_Lvc.pszText = "ma" ;
ListView_InsertColumn(hListView_w1,14,&_Lvc) ;
_Lvc.pszText = "ad" ;
_Lvc.cx = 135 ;
ListView_InsertColumn(hListView_w1,15,&_Lvc) ;
_Lvc.pszText = "n" ;
_Lvc.cx = 90 ;
ListView_InsertColumn(hListView_w1,16,&_Lvc) ;
_Lvc.pszText = "per_d" ;
ListView_InsertColumn(hListView_w1,17,&_Lvc) ;
_Lvc.pszText = "per_y" ;
ListView_InsertColumn(hListView_w1,18,&_Lvc) ;
_Lvc.pszText = "MOID" ;
ListView_InsertColumn(hListView_w1,19,&_Lvc) ;
ListView_DeleteColumn(hListView_w1,0) ;
// On affiche aussi bien les astéroïdes que les comètes et les planètes
// Au départ on affiche les asteroïdes sans différienciation Observer, Vectors et Elements
// On vérifie simplement que les fichiers existent
memset(&_Work,0,sizeof(WORKDATAS)) ;
sqlite3_exec(hWorkDataBase,szEmptyWorkTable,0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"BEGIN TRANSACTION",0,0,NULL) ;
Filtre_000(__hWnd,&_Work) ;
sqlite3_exec(hWorkDataBase,"END TRANSACTION",0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"VACUUM",0,0,NULL) ;
return ;
}
Building Chloe.obj.
Building Chloe.res.
Building Filtres.obj.
Building Language.obj.
Building Log.obj.
Building Orbites.obj.
Building Utilities.obj.
Building Window-01.obj.
Building Window-02.obj.
Building Window-03.obj.
Building Window-04.obj.
Building Window-05.obj.
Building Chloe.exe.
POLINK: warning: Realigned section '.idata$5' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$4' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$2' in object 'libgfl.lib(libgfl340.dll)' (from 4 to 1 byte(s)).
Done.
-
Thank Mr Pelle
I added your changes and it WORKS!
static void Wnd01_OnCreate(HWND __hWnd)
{
volatile alignas(HANDLE) LVCOLUMNA _Lvc ;
alignas(HANDLE) WORKDATAS _Work ;
alignas(HANDLE) LPSTR _lpszTmp ;
alignas(int) char _szTmp[1024] ;
hListView_w1 = CreateWindowExA(WS_EX_CLIENTEDGE,WC_LISTVIEW,"",
WS_CHILD|WS_VISIBLE|WS_VSCROLL|LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_SORTASCENDING,
0,0,0,0,__hWnd,NULL,hInstance,NULL) ;
ListView_SetExtendedListViewStyle(hListView_w1,LVS_EX_DOUBLEBUFFER|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES) ;
SendMessage(hListView_w1,WM_SETFONT,(WPARAM) hMainFont,TRUE) ;
ZeroMemory((void *) &_Lvc,sizeof(LVCOLUMNA)) ;
_lpszTmp = _szTmp ;
_Lvc.mask = LVCF_WIDTH|LVCF_TEXT|LVCF_FMT ;
_Lvc.fmt = LVCFMT_CENTER ;
_Lvc.cx = 80 ;
_Lvc.pszText = "SPK-ID" ;
ListView_InsertColumn(hListView_w1,0,&_Lvc) ;
ListView_InsertColumn(hListView_w1,1,&_Lvc) ;
_Lvc.cx = 140 ;
_Lvc.pszText = _szTmp ;
Message_Get(24,_lpszTmp,sizeof(_szTmp)) ;
ListView_InsertColumn(hListView_w1,2,&_Lvc) ;
_Lvc.cx = 70 ;
_Lvc.pszText = "ACP" ;
ListView_InsertColumn(hListView_w1,3,&_Lvc) ;
_Lvc.cx = 60 ;
_Lvc.pszText = "OVE" ;
ListView_InsertColumn(hListView_w1,4,&_Lvc) ;
_Lvc.cx = 50 ;
Message_Get(25,_lpszTmp,sizeof(_szTmp)) ;
_Lvc.pszText = _szTmp ;
ListView_InsertColumn(hListView_w1,5,&_Lvc) ;
_Lvc.cx = 40 ;
_Lvc.pszText = "NEA" ;
ListView_InsertColumn(hListView_w1,6,&_Lvc) ;
_Lvc.pszText = "PHA" ;
ListView_InsertColumn(hListView_w1,7,&_Lvc) ;
// e, a, q, i, om, w, ma, ad, n, per, per_y, moid, class
// e = Eccentricity
// a = Semi-major axis (au)
// q =
// i = Inclination of orbit plane (DEG)
// om = Longitude of Ascending Node (DEG)
// w = Argument of Perihelion (DEG)
// ma = Mean anomaly (DEG)
// ad = Aphelion distance (au)
// n = Mean motion (DEG/DAY)
// per = Orbital period (DAYS)
// per_y = Orbital period (YRS)
// moid = Distance minimale d'intersection d'une orbite
// class = Classe d'orbite
_Lvc.fmt = LVCFMT_RIGHT ;
_Lvc.cx = 90 ;
_Lvc.pszText = "e" ;
ListView_InsertColumn(hListView_w1,8,&_Lvc) ;
_Lvc.pszText = "a" ;
_Lvc.cx = 135 ;
ListView_InsertColumn(hListView_w1,9,&_Lvc) ;
_Lvc.pszText = "q" ;
ListView_InsertColumn(hListView_w1,10,&_Lvc) ;
_Lvc.pszText = "i" ;
_Lvc.cx = 90 ;
ListView_InsertColumn(hListView_w1,11,&_Lvc) ;
_Lvc.pszText = "om" ;
ListView_InsertColumn(hListView_w1,12,&_Lvc) ;
_Lvc.pszText = "w" ;
ListView_InsertColumn(hListView_w1,13,&_Lvc) ;
_Lvc.pszText = "ma" ;
ListView_InsertColumn(hListView_w1,14,&_Lvc) ;
_Lvc.pszText = "ad" ;
_Lvc.cx = 135 ;
ListView_InsertColumn(hListView_w1,15,&_Lvc) ;
_Lvc.pszText = "n" ;
_Lvc.cx = 90 ;
ListView_InsertColumn(hListView_w1,16,&_Lvc) ;
_Lvc.pszText = "per_d" ;
ListView_InsertColumn(hListView_w1,17,&_Lvc) ;
_Lvc.pszText = "per_y" ;
ListView_InsertColumn(hListView_w1,18,&_Lvc) ;
_Lvc.pszText = "MOID" ;
ListView_InsertColumn(hListView_w1,19,&_Lvc) ;
ListView_DeleteColumn(hListView_w1,0) ;
// On affiche aussi bien les astéroïdes que les comètes et les planètes
// Au départ on affiche les asteroïdes sans différienciation Observer, Vectors et Elements
// On vérifie simplement que les fichiers existent
memset(&_Work,0,sizeof(WORKDATAS)) ;
sqlite3_exec(hWorkDataBase,szEmptyWorkTable,0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"BEGIN TRANSACTION",0,0,NULL) ;
Filtre_000(__hWnd,&_Work) ;
sqlite3_exec(hWorkDataBase,"END TRANSACTION",0,0,NULL) ;
sqlite3_exec(hWorkDataBase,"VACUUM",0,0,NULL) ;
return ;
}
Building Chloe.obj.
Building Chloe.res.
Building Filtres.obj.
Building Language.obj.
Building Log.obj.
Building Orbites.obj.
Building Utilities.obj.
Building Window-01.obj.
Building Window-02.obj.
Building Window-03.obj.
Building Window-04.obj.
Building Window-05.obj.
Building Chloe.exe.
POLINK: warning: Realigned section '.idata$5' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$4' in object 'sqlite3.lib(sqlite3.dll)' (from 4 to 8 byte(s)).
POLINK: warning: Realigned section '.idata$2' in object 'libgfl.lib(libgfl340.dll)' (from 4 to 1 byte(s)).
Done.
Thanks again
-
Good :)
-
Here is why I asked some help(https://www.mediafire.com/convkey/01e4/2yypk8m6ptf9mw26g.jpg)
-
Very cool!
A lot of computation I'm sure.
John Z
-
No but big and numerous ephemeris to download. For this picture there are 1 500 000 points.
The most difficult is to choose the bitmap size. In the previous version I had bitmap of 8 000 x 8 000 pixels.
Now I directly create a 1 024 x 1 024 bitmap. It is long to draw, the sqlite tables must be sorted and a VACUMM must be made after every import... For one asteroid I download an ephemeris for the following dates
1-2000-2050
2-2000-2010
3-2010-2020
4-2020-2030
5-2030-2040
6-2040-2050
7-2000-2020
8-2000-2030
9-2000-2040
Each ephemeris has 90022 line of datas and is 23Mb in size...
Perhaps I could be faster if datas where not stored as reals but as integers.
I use SetPixel to draw the orbite.
Thank you Pelle & John for your comments.