小鱼儿游啊游啊。。。。
全部博文(338)
发布时间:2014-08-08 14:18:43
内存屏障 由于编译器的优化和缓存的使用,导致对内存的写入操作不能及时地反映出来,也就是说当完成对内存的写入操作之后,读取出来的有可能是旧的内容。我们把这种现象称为内存屏障(Memory Barrier) 。编译器引起的内存屏障 &nb.........【阅读全文】
发布时间:2014-08-08 11:24:25
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状.........【阅读全文】
发布时间:2013-01-07 14:39:16
swap(int *p1,int *2){int temp; temp=*p1; *p1=*p2; *p2=temp;}main(){int a,b; int *pointer_1,*pointer_2; scanf("%d%d",&a,&b); pointer_1=&a;pointer_2=&b; if(a<b)swap(pointer_1,pointer_2); printf("%d,%d\n",a,b);}进入函数后,函数创建几个空间给形参,再把实参数值拷过来。退出函数时,把形参空间释放,则影响不到实参。这就是值传递。 swap(int *p1,in......【阅读全文】
发布时间:2013-01-05 17:12:35
一、使用指针做函数返回值:1、当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指向的空间是否存在(即已向操作系统声明注册,不会被释放,即可能被其他操作修改);2、使用栈内存返回指针是明显错误的,因为栈内存将在调用结束后自动释放,从而主函数使用该地址空间将很危险。 例如: char* GetMemory() &nbs......【阅读全文】
发布时间:2013-01-03 15:40:35
代码1:void GetMemory(char *p){ p = (char*)malloc(100);}int main(int argc, char *argv[]){ char *str = NULL; GetMemory(str); strcpy(str, "Hello"); return 0;}str没有得到分配内存的地址值。 内存空间状态:首先申请了四个字节的栈空间,存放str指针,此时str的值为0,存放str的这块内存的地址值为0x0012ff7c。调用函数 GetMemory,指针P入栈,也分配了四个字节的栈空间,P被赋str的值即此时P的值也为0,存放指针P的内存......【阅读全文】