当前位置: 首页 > news >正文

怎么免费建设交友网站/搜外友链

怎么免费建设交友网站,搜外友链,如何判断网站好坏,新疆网站建设一条龙服务一个由C/C编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分:1、栈区(stack) 存放局部变量、函数参数、返回数据、返回地址等。系统自动分配释放 ,其…
一个由C/C++编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分:
1、栈区(stack)


存放局部变量、函数参数、返回数据、返回地址等。系统自动分配释放 ,其操作方式类似于数据结构中的栈。
需要注意的有三点:

第一, 退栈后销毁进栈时定义数据,请看下面这段。
char* fun(char *p)
{
char test[] = "hello";
p = test;
return p;
}
//下面是某调用函数中的代码
char *a = "world";
printf("%s\n",fun(a));
输出的结果是什么?hello还是world?
test[]数组是局部变量,当所属函数被调用时,系统为之在栈区分配一段内存空间,存六个字符以及一些记录信息,test对应该段内存空间首地址,当一个参数即指针p传入时,将test的值赋给p,而当函数调用结束的时候,发生退栈操作,刚才分配的内存被“销毁”,即写入“垃圾信息”。所以调用的结果是:给参数赋给了一个栈区地址,该地址指向的内存空间里是一堆垃圾信息,所以输出结果既不是hello又不是world。


第二,正是由于栈“后进先出”的特点,所以函数调用的机制是借助栈区来完成的,而当我们进行大量频繁的调用操作时,系统将随之进行大量的进栈退栈操作,从而消耗时间资源,使得程序的执行效率下降。C语言解决的方法是使用宏来代替那些短小而被频繁调用的函数,而C++则是引入了内联函数机制。除此之外,还有就是提高编程技巧,注意细节,比如这段代码,for (i=0; i<fun(); i++)如果循环过程不改变fun()的取值的话,那么强烈建议将此代码调整为
temp = fun();
for (i=0; i<temp; i++)
{
//***************
}
由于减少了每次循环中调用函数所造成的进栈退栈开销,所以执行效率将大大提高。需要类比的一个例子是循环嵌套,同样为了降低开销,建议在允许的情况下,将循环次数多的循环放在里面。


第三,由于系统为栈分配的空间很有限,一般只有1M(可以调整设置),如果申请的栈空间太大,将会出现栈溢出的错误。一次试验时,我用的机器上能分配的最大栈空间为1036084byte,也就是0.988M。所以当在栈区定义“大数据”时,一定要敏感。


2、堆区(heap)
由程序员通过malloc()等函数分配释放,若程序员不释放,程序结束时可能由OS回收。分配方式类似于链表。


需要注意的有五点:
第一, 分配后马上进行分配成功与否的验证。
第二, 有分配必须有释放,否则将有可能造成内存泄露。遵循“谁分配谁释放”的原则。
第三, 操作上,malloc和free对应,new和delete对应。另外,前者是库函数,使用时需要加载相应头文件,后者是C++中的关键字,是运算符,不需要加特别的头文件。
第四, 运行效率没有栈高,而且大量频繁使用将造成更多的内存碎片。
第五, 虽然free()函数的参数是指针,但它释放的是内存而不是指针,所以当执行完free()操作后,还应该将指针置空,以避免野指针问题。


3、全局区(静态区)(static)


存放全局变量、静态变量。程序结束后由系统释放。
C程序根据全局变量和静态变量有没有进行显式初始化,还将它们分为两个不同的区域,即BSS和DATA。据说这种区别在C++中已经没有了,而且编码规范要求我们在定义一个变量时,一定要同时对它进行初始化(尤其是一个指针,最好将它置为空),所以我们尽量还是在允许的情况下,遵守这一规范。另外需要特别说明的是,当没有进行显式初始化时,它们的值将被初始化为0。
当函数或外部变量的前面冠以static时,它们的可见范围将限定在所在文件内,程序中其他文件无法见到它们,我们可以用这个办法来有效避免命名冲突。而当一个局部变量被static修饰时,它的可见范围并没有修改,还是限定在函数内,但它的生存期将延长为程序生存期,因为存储区域不是栈区,所以不会因为退栈而被销毁。


4、文字常量区


常量字符串就是放在这里的。 程序结束后由系统释放。
常量,顾名思义,不可进行写操作,关于这一点的注意事项,请看下面这段错误代码;
char *p = "atbcdef";
*(p+1) = 'b';
程序运行时将报非法写入错误。
关于局部的字符串常量是存放在全局的常量区还是栈区,不同的编译器有不同的实现。可以通过汇编语言查看一下。VC环境下,局部常量就像局部变量一样存储于栈中,全局常量、字符常量存储于文字常量区。TC在常量区。
有人把常量区也归在了全局静态区,也有人把常量归在代码段,真是费解啊,我也不知道归哪,哪天有空看一下汇编代码,深究一下吧,不过从编程的角度来考虑,似乎追究这个问题意义不大。



再强调两个问题:
//栈和堆生长方向问题
int i;
int a[5];
    for (i=0; i<=5; i++)
{
a[i] = 1;
}


//内存对齐问题,
struct stru1
{
char a;
int b;
char c;
};
struct stru2
{
int d;
char e;
char f;
};
printf("%d\t%d\n",sizeof(stru1),sizeof(stru2));

http://www.jmfq.cn/news/4825801.html

相关文章:

  • 北京网站建设费用/西安百度公司地址介绍
  • 从零开始制作 wordpress 主题/汕头seo计费管理
  • 网络公司手机网站模板/seo怎样
  • 乌鲁木齐网站建设公司/500个游戏推广群
  • 我要做个网站该怎么做/百度网盘免费下载
  • 十大免费不用收费的网站/正规考证培训机构
  • 什么是b2c电子商务模式/优化seo教程技术
  • 网站购买空间/泉州seo培训
  • 商城网站定制建设价位/网站推广的方式有哪些?
  • 帮别人做网站进了看守所/搜索引擎优化seo的英文全称是
  • 苹果销售网站怎么做/网店代运营和推广销售
  • 网站开发技术三大件/自己如何注册网站
  • 做网站是用什么语言的/seo综合查询国产
  • 番禺五屏网站建设/搜索引擎优化的根本目的
  • 网站建设必会的软件/建个网站需要多少钱?
  • 镇江网站制作价格/手机百度搜索引擎
  • 山西省煤矿建设协会网站/seo搜索引擎优化推广
  • 中山市做网站实力/线上营销课程
  • 怎么做网站解析/有什么引流客源的软件
  • 营销型网站建设易网拓/电工培训内容
  • 网站程序制作/太原网站seo
  • 个人网站怎么做支付/电商怎么注册开店
  • 做一个简单的公司网站要多少钱/怎么让百度收录网址
  • 品牌型网站建设方案/成都新闻最新消息
  • cn.wordpress.org/seo搜索优化是什么
  • 重庆免费网站建站模板/最近10个新闻
  • 做网站一般使用什么算法/b站推广2024mmm已更新
  • 网站开发完整项目平台网站开发/卡点视频软件下载
  • 大庆做网站的/seo sem是什么意思
  • 成都专业的网站建设制作公司哪家好/百度关键词首页排名