代码改变世界

阅读排行榜

windows线程创建

2012-10-11 15:03 by kennyMc, 397 阅读, 收藏,
摘要: ws中,线程是从所在进程的4GB地址空间中分配自己的栈。 线程内创建的局部变量都是在线程的栈上,静态或全家变量多个线程可以访问,容易破坏数据。 重要的一个知识点:线程的上下文context结构 之前在clr c#中看过,但是没有认真看,每个线程都有一组自己的CPU寄存器,叫做线程的上下文。 context结构保存了进程上次执行时CPU的寄存器状态。 当线程被调度到使用CPU时,系统用线程的上下文来初始化CPU的寄存器,其中一个CPU寄存器保存了 线程要执行的下一条CPU指令的地址,CPU寄存器中还有一个执行线程的栈地址的指针。#include <iostream>#includ.. 阅读全文

指针运算

2012-09-17 23:33 by kennyMc, 332 阅读, 收藏,
摘要: 指针只能进行加减运算。指针的加运算递增的值取决于指针指向对象的类型。 int a=20; int* p=&a;这里指针指向的地址假如是0x22ff44,p++以后指针指向的地址就是p+1*sizeof(int)=0x22ff48假如指针指向数组,那么p++就相当于指向数组的下一个元素,具体指针递增的字节数看数组的类型 double a[]={1,2,3}; double* p=a; cout<<*(p+1)<<endl;*(p+1)这里指针指向数组第二个元素,然后输出数组地址的值(p+1)=2这样就是错误的 阅读全文

CRITICAL_SECTION临界区

2012-10-21 22:06 by kennyMc, 322 阅读, 收藏,
摘要: CRITICAL_SECTION不是核心对象,它是用一块共享资源来处理线程同步。线程同步方式很多,之间的区别和分类可以查阅windows核心编程和clr。#include <iostream>#include <process.h>#include <windows.h>using namespace std;//临界区CRITICAL_SECTION lock_cs;//这里如果不锁定,那么2个线程同进进入方法,可能出现几种输出情况//而我们期待的是同时只有一个线程对变量i进行操作。unsigned __stdcall ThreadFun(void* pa 阅读全文

引用堆中的对象

2012-12-12 00:57 by kennyMc, 321 阅读, 收藏,
摘要: 引用无法直接指向new关键在在堆中创建的对象,必须通过指针来做中间者。#include <iostream>#include <string>using std::cout;using std::endl;using std::string;int main(){ int *p=new int(2); int &r=*p;//r是指针p指向的int变量引用,int变量分配在堆中 cout<<"*p:"<<*p<<endl; cout<<"r:"<<r<< 阅读全文

指针相减-堆和栈结果不同

2012-12-11 22:25 by kennyMc, 310 阅读, 收藏,
摘要: #include <iostream>#include <string>using std::cout;using std::endl;using std::string;int main(){ int *p; int *p1; int i=10; int j=20; p=&i; p1=&j; cout<<"指针指向栈空间"<<endl; cout<<"p:"<<p<<" *p:"<<*p<<endl; cout 阅读全文