⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csdn_文档中心_vc++多线程下内存操作的优化.htm

📁 csdn10年中间经典帖子
💻 HTM
📖 第 1 页 / 共 5 页
字号:
            <P class=MsoNormal><B><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">测试</SPAN><SPAN 
            lang=EN-US><o:p></o:p></SPAN></B></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为了验证在多处理器下的效果,编了一个测试程序</SPAN><SPAN 
            lang=EN-US>heaptest.c</SPAN><SPAN 
            style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。该程序接收三个参数,第一个参数表示线程数,第二个参数是所申请的内存的最大值,第三个参数每个线程申请内存的次数。</SPAN><SPAN 
            lang=EN-US><o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#define 
            WIN32_LEAN_AND_MEAN<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#include 
            &lt;windows.h&gt;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#include 
            &lt;process.h&gt;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#include 
            &lt;stdio.h&gt;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>#include 
            &lt;stdlib.h&gt;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>/* compile with cl /MT 
            heaptest.c */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>/* to switch to the system heap 
            issue the following command<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>before starting 
            heaptest from the same command line<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN>set 
            __MSVCRT_HEAP_SELECT=__GLOBAL_HEAP_SELECTED,1 
            */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>/* structure transfers variables 
            to the worker threads */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>typedef struct 
            tData<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>{<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>int 
            maximumLength;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>int 
            allocCount;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>} 
            threadData;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>void printUsage(char** 
            argv)<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>{<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp; </SPAN><SPAN 
            style="mso-spacerun: yes">&nbsp;</SPAN>fprintf(stderr,"Wrong number 
            of parameters.\nUsage:\n");<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>fprintf(stderr,"%s threadCount maxAllocLength 
            allocCount\n\n",<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>argv[0]);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>exit(1);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>}<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>unsigned __stdcall 
            workerThread(void* myThreadData)<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>{<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>int 
            count;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>threadData* 
            myData;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>char* 
            dummy;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>srand(GetTickCount()*GetCurrentThreadId());<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>myData=(threadData*)myThreadData;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/* now let us do 
            the real work */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>for(count=0;count&lt;myData-&gt;allocCount;count++)<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>{<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>dummy=(char*)malloc((rand()%myData-&gt;maximumLength)+1);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>free(dummy);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>}<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>_endthreadex(0);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/* to satisfy 
            compiler */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>return 
            0;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>}<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>int main(int argc,char** 
            argv)<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US>{<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>int 
            threadCount;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>int 
            count;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>threadData 
            actData;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>HANDLE* 
            threadHandles;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>DWORD 
            startTime;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>DWORD 
            stopTime;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>DWORD 
            retValue;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>unsigned 
            dummy;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/* check 
            parameters */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>if(argc&lt;4 || 
            argc&gt;4)<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>printUsage(argv);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>/* get 
            parameters for this run */<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>threadCount=atoi(argv[1]);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>if(threadCount&gt;64)<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
            </SPAN>threadCount=64;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>actData.maximumLength=atoi(argv[2])-1;<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>actData.allocCount=atoi(argv[3]);<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; 
            </SPAN>threadHandles=(HANDLE*)malloc(threadCount*sizeof(HANDLE));<o:p></o:p></SPAN></P>
            <P class=MsoNormal><SPAN lang=EN-US><SPAN 
            style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>printf("Test run 
            with %d simultaneous threads:\n",threadCount);<o:p></o:p></SPAN></P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -