挂羊头卖犬肉 挂羊头卖犬肉
挂羊头卖狗肉的人
关注数: 104 粉丝数: 398 发帖数: 4,246 关注贴吧数: 63
求问这段话靠谱吗 在16位Windows中是有区别的,因为在16位windows用一个全局堆和局部堆来管理内存,每一个应用程序或dll装入内存时,代码段被装入全局堆,而系统又为每个实例从全局堆中分配了一个64kb的数据段作为该实例的局部堆,用来存放应用程序的堆栈和所有全局或静态变量。而LocalAlloc/GlobalAlloc就是分别用于在局部堆或全局堆中分配内存。 由于每个进程的局部堆很小,所以在局部堆中分配内存会受到空间的限制。但这个堆是每个进程私有的,相对而言分配数据较安全,数据访问出错不至于影响到整个系统。 而在全局堆中分配的内存是为各个进程共享的,每个进程只要拥有这个内存块的句柄都可以访问这块内存,但是每个全局内存空间需要额外的内存开销,造成分配浪费。而且一旦发生严重错误,可能会影响到整个系统的稳定。 不过在Win32中,每个进程都只拥有一个省缺的私有堆,它只能被当前进程访问。应用程序也不可能直接访问系统内存。所以在Win32中全局堆和局部堆都指向进程的省缺堆。用LocalAlloc/GlobalAlloc分配内存没有任何区别。甚至LocalAlloc分配的内存可以被GlobalFree释放掉。所以在Win32下编程,无需注意Local和Global的区别,一般的内存分配都等效于HeapAlloc(GetProcessHeap(),...). new是一个宏, 调用new,相当于先用malloc,分配内存,然后嗲用类的构造函数,初始化这段内存
accept函数不堵塞,大家帮我找找原因吧 代码如下:win32控制台程序工程 #include "winsock2.h"#include "stdio.h"#pragma comment (lib,"WS2_32.LIB") int main(){    WORD wVersionRequested;    WSADATA wsaData;    int err;    wVersionRequested = MAKEWORD( 2, 2 );    err = WSAStartup( wVersionRequested, &wsaData );     if ( err != 0 )     {            return 0;        //如果WSAStart函数调用失败,main函数直接就返回了呀亲    }     if ( LOBYTE( wsaData.wVersion ) != 2 ||                    HIBYTE( wsaData.wVersion ) != 2 )            //如果程序使用的不是winsock 2.2版本,main函数也直接返回啊亲    {            //两个宏LOBYTE 和HIBYTE,以及MAKEWORD        WSACleanup( );                        //这里由于WSAStartup函数已经执行成功了,因此终止程序前要先清理本程序winsock资源            return 0;     }    SOCKET s1;            //定义一个服务器SOCKET    //    s1=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);        //这里第一项设定了使用TCP/IP协议,第二项设定了使用TCP而不是UDP    s1=socket(AF_INET,SOCK_STREAM,0);    if(s1==INVALID_SOCKET)                //调用socket 函数没错        return 0;    SOCKADDR_IN addr1;            //定义一个IP地址,用于和服务器SOCKET绑定    addr1.sin_family=AF_INET;    //设定本IP地址的地址族为 TCP/IP协议    addr1.sin_addr.S_un.S_addr=htonl(INADDR_ANY);        //这里是将s1与本机IP"192.168.0.1"绑定,实际程序当中一般直接将本行写为                                                                    //addr1.sin_addr.S_un.S_addr=htonl(INADDR_ANY);    addr1.sin_port=htons(8800);    //1024以下的端口号为系统保留使用,我们自己用的时候只要用1024以上的即可                            //如果我们在同一台电脑上开了两个服务器端程序,这里绑定的端口号相同,或者是端口号同另外一个进程ID相同,
首页 1 2 3 下一页