6: 2011-05-07 (Sat) 20:15:27 s10037 |
7: 2012-02-18 (Sat) 21:30:04 s10037 |
| ヘッダーファイルはbullet-2.xx → srcに入っている~ | | ヘッダーファイルはbullet-2.xx → srcに入っている~ |
| | | |
- | **win32API [#xd9a6814] | + | **アラインメント [#nc3a80e9] |
- | ***ウィンドウ生成 [#t07e989f] | + | ***構造体に関して [#pfeed50a] |
- | #include<windows.h>~ | + | たとえば |
- | LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);~ | + | typedef struct Hoge |
- | ATOM InitApp(HINSTANCE);~ | + | { |
- | BOOL InitInstance(HINSTANCE, int);~ | + | int int1; |
| + | double double1; |
| + | char char1; |
| + | double double2; |
| + | }Hoge; |
| | | |
- | LPCTSTR lpszClassName = TEXT("win01.cpp");~ | + | があったとして |
| + | サイズがいくつになるか |
| + | [obara@TandemMirror arainmento]$ ./a.out |
| + | 24 |
| + | stHoge 0xbfde0e2c |
| + | int1 0xbfde0e2c |
| + | double1 0xbfde0e30 |
| + | char1 0xbfde0e38 |
| + | double2 0xbfde0e3c |
| | | |
- | int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)~ | + | ってな感じになりchar1とdouble2の間に隙間が出来た |
| + | これはコンパイラが勝手に境界調整(アラインメント)して適当に詰め物(パディングというらしい)を入れた |
| + | CPUによってパディングのやり方が違うらしい |
| | | |
- | {~ | + | パディングには下手に触ってはいけないらしい |
- | MSG msg;~ | + | |
- | BOOL bRet;~ | + | |
| | | |
- | if(!InitApp(hCurInst))~ | + | **malloc calloc realloc [#mae99393] |
- | return FALSE;~ | + | ***malloc [#o77c9597] |
- | if(!InitInstance(hCurInst, nCmdShow))~ | + | voidのポインタ返ってくる |
- | return FALSE;~ | + | いじょ |
- | while ((bRet = GetMessage(&msg, NULL, 0,0)) != 0)~ | + | ***calloc [#g4e06f23] |
- | {~ | + | voidのポインタが返ってくる |
- | if (bRet == -1)~ | + | んで中のビットが全部0になっているらしい |
- | {~ | + | いじょ |
- | break;~ | + | ***realloc [#ycfe0152] |
- | }~ | + | void realloc(変更したいポインタ,どんくらいヒープするかのサイズ) |
- | else~ | + | あんまり頻繁に使わない方がよさげ |
- | {~ | + | |
- | TranslateMessage(&msg);~ | + | |
- | DispatchMessage(&msg);~ | + | |
- | }~ | + | |
- | }~ | + | |
- | return (int)msg.wParam;~ | + | |
- | }~ | + | |
- | //ウィンドウクラス登録~ | + | |
- | ATOM InitApp(HINSTANCE hInst)~ | + | |
- | {~ | + | |
- | WNDCLASSEX wc;~ | + | |
- | wc.cbSize = sizeof(WNDCLASSEX);~ | + | |
- | wc.style = CS_HREDRAW | CS_VREDRAW;~ | + | |
- | wc.lpfnWndProc = WndProc;~ | + | |
- | wc.cbClsExtra = 0;~ | + | |
- | wc.cbWndExtra = 0;~ | + | |
- | wc.hInstance = hInst;~ | + | |
- | wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), | + | |
- | IMAGE_ICON, 0,0, LR_DEFAULTSIZE | LR_SHARED);~ | + | |
- | wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), | + | |
- | IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED);~ | + | |
- | wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);~ | + | |
- | wc.lpszMenuName = NULL;~ | + | |
- | wc.lpszClassName = lpszClassName;~ | + | |
- | wc.hIconSm = (HICON)LoadImage(~ | + | |
- | NULL,MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, | + | |
- | 0, 0, LR_DEFAULTSIZE | LR_SHARED);~ | + | |
| | | |
- | return (RegisterClassEx(&wc));~ | + | 頻繁に巨大な領域をreallocで伸ばすと時間もかかりヒープの中につかえない巨大な空き領域がどんどんできてしまうらしい |
- | }~ | + | |
- | //ウインドウの生成~ | + | |
- | BOOL InitInstance(HINSTANCE hInst, int nCmdShow)~ | + | |
- | {~ | + | |
- | HWND hWnd;~ | + | |
| | | |
- | hWnd = CreateWindow(lpszClassName,~ | + | ***フラグメンテーション [#c0558cda] |
- | TEXT("クソゲー"),~ | + | てきとーにメモリの確保、開放を繰り返すとメモリが分断されていき使用できない細かい空きブロックができる |
- | WS_OVERLAPPEDWINDOW,~ | + | この現象をフラグメンテーションというらしい |
- | CW_USEDEFAULT,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | CW_USEDEFAULT,~ | + | |
- | NULL,~ | + | |
- | NULL,~ | + | |
- | hInst,~ | + | |
- | NULL);~ | + | |
- | if(!hWnd)~ | + | |
- | return FALSE;~ | + | |
- | ShowWindow(hWnd, nCmdShow);~ | + | |
- | UpdateWindow(hWnd);~ | + | |
- | return TRUE;~ | + | |
- | }~ | + | |
| | | |
- | //ウインドウプロシージャ~ | + | (メモリはいっぱいあるぜ 気にするこたぁねぇw) |
- | LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)~ | + | |
- | {~ | + | **インクルード!ガーーーードッ!! [#ueddc470] |
- | switch (msg)~ | + | ***再定義防止、無駄なプリコンパイルを減らす [#qad655c3] |
- | {~ | + | ヘッダーに |
- | case WM_DESTROY:~ | + | #ifndef OBARA_H |
- | PostQuitMessage(0);~ | + | #define OBARA_H |
- | break;~ | + | |
- | default:~ | + | ~~ |
- | return(DefWindowProc(hWnd, msg, wp, lp));~ | + | |
- | }~ | + | #endif |
- | return 0;~ | + | と最初と最後に書いて置くだけで再定義防止、とビルド時間を短縮できる |
- | }~ | + | |
| + | ifndef とは逆にifdefというのももある |
| + | ifndefとは逆で、ifdefは定義されていればendifまでを実行するらしい |