久久99热66热这里只有精品,特黄特色的大片在线观看,亚洲日本三级在线观看,国产三级农村妇女在线,亚洲av毛片免费在线观看,哺乳叫自慰在线看,天天干美女av网

準確定制Windows應用程序堆棧大小

時間:2023-05-01 08:08:33 計算機論文 我要投稿
  • 相關推薦

準確定制Windows應用程序堆棧大小

在編寫Windows應用程序時,我們是通過模塊定義文件(.def)中的STACKSIZE語句來定義以字節(jié)為單位的應用程序堆棧大小,以用于函數參數的中間存儲。根據Windows SDK手冊的推薦,最小堆棧大小應為5120字節(jié)。事實上,這是一個比實際需求放寬了許多的推薦值。Microsoft公司沒有對如何準確設定這一參數提供有效方法。由于Windows本身是一個多任務環(huán)境,可以同時運行多個應用程序,因此,我們對堆棧參數的選擇會導致有限內存空間的浪費。在此,本文給出一種準確定制Windows應用程序堆棧大小的方法,具體的實現方法如下。

根據Andrew Schulman在《未公開的Windows核心技術》中提供的資料,在應用程序的實例句柄所指向的缺省數據段起始位置,Windows定義了如下的INSTDATA結構:

typedef struct {

WORD wMustBeZero; //此參數必須為零

DWORD dw01dSSSP; //保存當前的SS:SP指針;

WORD pLocalHeap; //指向局部堆信息結構的近指針

WORD pAtomTable; //指向任務原子表的近指針

WORD pStackTop; //指向棧頂的近指針

WORD pStackMin; //當前使用的堆棧大小

WORD pStackBottom; //指向棧底的近指針

} INSTDATA;

我們提供的方法的思路是,在應用程序被加載時,先在堆棧區(qū)的棧頂位置到當前SP之間填充固定字節(jié)(如0xaa)來進行初始化。在程序執(zhí)行結束時,通過對堆棧區(qū)初始化值的改變情況來計算應用程序所使用的實際堆棧的大小。以上的工作主要依靠下面兩個函數來完成。

1.堆棧初始化函數

void FAR PASCAL SetStack(void)

{

BYTE near *npStackTop,near *npStackCurrent;

npStackTop=((NPINSTDATA)0x0000)→pStackTop;

-asm mov npStackCurrent,SP;

npStackCurrent-=2;

while(npStackTop<npStackCurrent) *npStackTop =0xaa;

}

2.堆棧大小計算函數

WORD FAR PASCAL CacuStack(void)

{

BYTE near *npStackTop,near *npStackBottom;

npStackTop=((NPINSTDATA)0x0000)→pStackTop;

npStackBottom=((NPINSTDATA)0x0000)→pStackBottom;

while(*npStackTop=0xaa) npStackTop ;

return((WORD)(npStackBottom-npStackTop));

}

在應用程序中調用以上兩個函數以定制堆棧大小的方法如下例所

示:

int PASCAL WinMain(hInstance, hPrevInstance, 1pCmdLine,

nCmdShow)

HANDLE hInstance; /*current instance*/

HANDLE hPrevInstance; /*previous instance*/

LPSTR 1pCmdLine; /*command line*/

int nCmdShow; /*show-window type (open/icon)*/

{

char szEchoMsg[60];

MSC msg;

SetStack ();

if (!hPrevInstance) /*Other instances of app running?*/

if (!InitApplication(hInstance)) /*Initialize shared thi

ngs*/

return (FALSE); /*Exit if unable to initialize*/

/*Perform initializations that apply to a specific insta

nce*/

if (!InitInstance(hInstance,nCmdShow))

return (FALSE);

/*Acquire and di

[1] [2] 

【準確定制Windows應用程序堆棧大小】相關文章:

準確04-29

WINDOWS XP教案04-25

安裝Windows或啟動Windows時鼠標不可用06-20

定制04-29

大小04-29

windows及應用實踐報告04-14

初識Windows的教學方案01-17

準確定位作文09-25

重提準確把握教材04-30

廣告的定位要準確04-29