精华内容
下载资源
问答
  • 能够体现全局数据与局部变量内存关系,我在Cygwin上面跑出来结果是STACK 空间只有2M,用完后程序就停止执行了,源代码如下:filename : DepleteStackSize.c #include static long STACK_BLOCK_HEADER;...

    近日看到有一些与程序、内存的的资料,比较有意思。能够体现全局数据与局部变量的内存关系,我在Cygwin上面跑出来的结果是STACK 的空间只有2M,用完后程序就停止执行了,源代码如下:

    filename : DepleteStackSize.c
      #include   

    static long STACK_BLOCK_HEADER;  

    void depleteStackSpace() {   // declare local variable for booking some STACK spaces.  

     int intVarInStackSpace = 0;   // output the memory offset  

    printf("%3.1fM/n", (STACK_BLOCK_HEADER - (long)(&intVarInStackSpace)*1.0)/(1024*1024));   // self recursive   depleteStackSpace();

     

     int main() {   // the first local variable in application memory.  

     int intVarInStackSpace = 0;   // get first local variable address as the STACK block header  

    STACK_BLOCK_HEADER = (long)(&intVarInStackSpace);   // perform depletion  

    depleteStackSpace();   // out the normal exit message  

    printf("normal exit./n"); }

     

    在Cygwin中用gcc编译为Win32程序:

    [root@sharkwang Temp] # gcc -mno-cygwin -o DepleteStackSize.exe DepleteStackSize.c

     

    执行结果摘录如下:
    2.0M
    2.0M
    2.0M  <--- %3.1f格式化后都四舍五入了,所以1.5xxM以上都变成2.0M了
    2.0M
    2.0M
    2.0M
    2.0M
    2.0M  <--- 到最大空间后程序就停止了,没有看到Normal Exit的输出...
    [root@sharkwang Temp] #

     

    展开全文
  • 近日看到有一些与程序、内存的的资料,...能够体现全局数据与局部变量内存关系,我在Cygwin上面跑出来结果是STACK 空间只有2M,用完后程序就停止执行了,源代码如下: filename : DepleteStackSize.c #include
     marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280">

    近日看到有一些与程序、内存的的资料,
    比较有意思。能够体现全局数据与局部变量的内存关系,我在Cygwin上面跑出来的结果是STACK 的空间只有2M,用完后程序就停止执行了,源代码如下:

    filename : DepleteStackSize.c


    static long

    void
    // .
    int
    //
    , long/
    //



    int
    // .
    int
    //
    long
    //

    //


    在Cygwin中用gcc编译为Win32程序:


    [root@sharkwang Temp] #
    gcc -mno-cygwin -o DepleteStackSize.exe DepleteStackSize.c


    执行结果摘录如下:
    2.0M
    2.0M
    2.0M  <--- %3.1f格式化后都四舍五入了,所以1.5xxM以上都变成2.0M了
    2.0M
    2.0M
    2.0M
    2.0M
    2.0M  <--- 到最大空间后程序就停止了,没有看到Normal Exit的输出...
    [root@sharkwang Temp] #



    展开全文
  • 本算法主要是在参考立方体的选取上和定义的_MAX的值对结果影响较大,所以应该选择合适的数。 3.2 并行算法设计 对FOR循环进行划分使用两个处理器完成计算。例如对一个长为n的序列,首先划分得到两个长为n/2的序列,...
  • 本算法主要是在参考立方体的选取上和定义的_MAX的值对结果影响较大,所以应该选择合适的数。 3.2 并行算法设计 对FOR循环进行划分使用两个处理器完成计算。例如对一个长为n的序列,首先划分得到两个长为n/2的序列,...
  • 被直接跳过不执行,最后i、j的值如下: 这是Keilc编译器对编译代码优化所导致的,查看汇编指令,如下: 也可以发现:第7条语句时没有对应的汇编指令的。说明代码被优化了。 要解决这个问题可以使用以下方法: ...

    .c文件如下:在这里插入图片描述
    1.开启调试后,打开 视图->监视和调用堆栈窗口(w) 监视变量i和j的值,在单步调试结束时(程序结束前),可以发现 第7条赋值语句:i=2;被直接跳过不执行,最后i、j的值如下:
    在这里插入图片描述
    这是Keilc编译器对编译后的代码优化所导致的,查看汇编指令,如下:
    在这里插入图片描述

    也可以发现:第7条语句时没有对应的汇编指令的。说明代码被优化了。

    要解决这个问题可以使用以下方法:
    1.在变量定义之前,加个 volatile,禁止编译器优化
    源代码:
    在这里插入图片描述
    监视变量:
    在这里插入图片描述
    汇编指令:
    在这里插入图片描述
    2.设置Keil的编译器,把优化级别调整到0,也就是禁止优化
    在这里插入图片描述
    在这里插入图片描述
    级别中可以调整优化级别:9种优化级别的作用都可以在网上搜到。(版本不同,对应的优化级别也不同)
    0级优化:
    1、 常数折叠:只要有可能,编译器就执行将表达式化为常数数字的计算,其中包括运行地址的计算。
    2、 简单访问优化:对8051系统的内部数据和位地址进行访问优化。
    3、 跳转优化:编译器总是将跳转延至最终目标上,因此跳转到跳转之间的命令被删除。
    1级优化:
    1、 死码消除:无用的代码段被消除。
    2、 跳转否决:根据一个测试回溯,条件跳转被仔细检查,以决定是否能够简化或删除。
    2级优化:
    1、 数据覆盖:适于静态覆盖的数据和位段被鉴别并标记出来。连接定位器BL51通过对全局数据流的分析,选择可静态覆盖的段。
    3级优化:
    1、“窥孔”优化:将冗余的MOV命令去掉,包括不必要的从存储器装入对象及装入常数的操作。另外如果能节省存储空间或者程序执行时间,复杂操作将由简单操作所代替。
    4级优化:
    1、 寄存器变量:使自动变量和函数参数尽可能位于工作寄存器中,只要有可能,将不为这些变量保留数据存储器空间。
    2、扩展访问优化:来自IDATA、XDATA、PDATA和CODE区域的变量直接包含在操作之中,因此大多数时候没有必要将其装入中间寄存器。
    3、局部公共子式消除:如果表达式中有一个重复执行的计算,第一次计算的结果被保存,只要有可能,将被用作后续的计算,因此可从代码中消除繁杂的计算。
    4、 CASE/SWITCH语句优化:将CASE/SWITCH语句作为跳转表或跳转串优化。
    5级优化:
    1、 全局公共子式消除:只要有可能,函数内部相同的子表达式只计算一次。中间结果存入一个寄存器以代替新的计算。
    2、 简单循环优化:以常量占据一段内存的循环再运行时被优化。
    6级优化:
    1、 回路循环:如果程序代码能更快更有效地执行,程序回路将进行循环。
    7级优化:
    1、 扩展入口优化:在适合时对寄存器变量使用DPTR数据指针,指针和数组访问被优化以减小程序代码和提高执行速度。
    8级优化:
    1、 公共尾部合并:对同一个函数有多处调用时,一些设置代码可被重复使用,从而减小程序代码长度。
    9级优化:
    1、 公共子程序块:检测重复使用的指令序列,并将它们转换为子程序。C51甚至会重新安排代码以获得更多的重复使用指令序列。
    当然,优化级别并非越高越好,应该根据具体要求适当选择。

    展开全文
  • 1.分支结构之简单if语句简单if语句的基本结构如下:其语义是:如果表达式的值为真,则执行的语句,否则不执行该语句。 其过程可表示为下图注意:if()后面没有分号,直接写{}2.分支结构之简单if-else语句简单的if...
    1.分支结构之简单if语句
    简单if语句的基本结构如下:
    其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。 其过程可表示为下图
    注意:if()后面没有分号,直接写{}

    2.分支结构之简单if-else语句
    简单的if-else语句的基本结构如下:
    其语义是:如果表达式的值为真,则执行代码块1,否则执行代码块2。其执行过程可表示为下图:
    注意:if()后面没有分号,直接写{},else后面也没有分号,直接写{}

    3.分支结构之多重if-else语句
    针对这种多重的条件的话,在C语言中就要用到多重if-else语句,其结构如下:
    注意:最后一个是else,而且衔接的是else if
    其语义是:依次判断表达式的值,当出现某个值为真时,则执行对应代码块,否则执行代码块n。 if-else-if语句的执行过程如下图所示:
    注意:当某一条件为真的时候,则不会向下执行该分支结构的其他语句。

    4.分支结构之嵌套if-else语句
    考试之前,家长说了,你如果考90分以上的话会买玩具,否则没有奖励,如果能在获得玩具的情况下获取班级前三名的话会有大餐吃。
    那么想满足这位家长所有说的,就需要用到C语言中嵌套if-else语句。嵌套if-else语句的意思,就是在if-else语句中,再写if-else语句。其一般形式为:
    其执行过程为:

    5.循环结构之while循环
    我们将这种反复不停的执行某个动作称之谓循环 ,C语言中有三种循环结构,先看一下C语言while循环的结构
    其中表达式表示循环条件,执行代码块为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体代码块。其执行过程可用下图表示:
    使用while语句应注意以下几点:
    1、while语句中的表达式一般是关系表达或逻辑表达式,当表达式的值为假时不执行循环体,反之则循环体一直执行。
    2、一定要记着在循环体中改变循环变量的值,否则会出现死循环(无休止的执行)。
    3、循环体如果包括有一个以上的语句,则必须用{}括起来,组成复合语句。


    6.循环结构之do-while循环

    一般形式如下:
    do-while循环语句的语义是:它先执行循环中的执行代码块,然后再判断while中表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。其执行过程可用下图表示:
    注意:使用do-while结构语句时,while括号后必须有分号


    7.循环结构之for循环(一)
    在C语言中还有一种更加灵活的循环,它完全可以秒杀前面两种循环结构,因为它相对前两种循环结构语法更直接、简单。它的一般形式为:
    它的执行过程如下:
    第一步:执行表达式1,对循环变量做初始化;
    第二步:判断表达式2,若其值为真(非0),则执行for循环体中执行代码块,然后向下执行;若其值为假(0),则结束循环;
    第三步:执行表达式3;
    第四步:执行for循环中执行代码块后执行第二步;
    第五步:循环结束,程序继续向下执行。
    其执行过程可用下图表示:
    注意:for循环中的分号一定要写


    8.循环结构之for循环(二)
    在for循环中,表达式1是一个或多个赋值语句,它用来控制变量的初始值表达式2是一个关系表达式,它决定什么时候退出循环;表达式3是循环变量的步进值,定义控制循环变量每循环一次后按什么方式变化。这三部分之间用分号(;)分开
    使用for语句应该注意
    1、for循环中的“表达式1、2、3”均可可以缺省,但分号(;)不能缺省
    2、省略“表达式1(循环变量赋初值)”,表示不对循环变量赋初始值。如:
    3、省略“表达式2(循环条件)”,不做其它处理,循环一直执行(死循环)。如:
    4、省略“表达式3(循环变量增量)”,不做其他处理,循环一直执行(死循环)。如:
    注:死循环可以使用后面即将讲到的break解决
    5、表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。如:
    6、表达式1和表达式3可以是一个简单表达式也可以是多个表达式以逗号分割。如:
    运行结果为
    7、表达式2一般是关系表达式或逻辑表达式,但也可是数值表达式或字符表达式,只要其值非零,就执行循环体。
    8、各表达式中的变量一定要在for循环之前定义。如:


    9.循环结构之三种循环比较
    while、do-while和for三种循环在具体的使用场合上是有区别的,如下:
    1、在知道循环次数的情况下更适合使用for循环
    2、在不知道循环次数的情况下适合使用while或者do-while循环,如果有可能一次都不循环应考虑使用while循环,如果至少循环一次应考虑使用do-while循环
    但是从本质上讲,while,do-while和for循环之间是可以相互转换的,如:小明被老师罚抄10次computer这个单词,分别用三种语法写:


    10.循环结构之多重循环
    在功能需求上,往往一个循环满足不了,比如:循环用一个“*”输出,得到一下图形
    上面这个例子显然我们用一个循环不是太容易实现,这个时候我们就要用到多重循环,多重循环就是在循环结构的循环体中又出现循环结构
    在实际开发中一般最多用到三层重循环。因为循环层数越多,运行时间越长,程序越复杂,所以一般用2-3层多重循环就可以了。另外不同循环之间也是可以嵌套的。
    多重循环在执行的过程中,外层循环为父循环,内层循环为子循环,父循环一次,子循环需要全部执行完,直到跳出循环。父循环再进入下一次,子循环继续执行...
    注:一个父循环可以有多个子循环
    那么上面这个用“*”输出的矩形用多重循环实现如下:
    注意:printf("%\n),在这里是循环换行的意思。


    11.结束语句之break语句
    在我们生活中,可能会由于某种原因需要中断当前的事情,并且不能继续进行下去。如:小明今天篮球训练,需要运球10次,当运到5次的时候,突然肚子疼无法坚持循环,这个时候就要停止训练。
    我们可以将运球看成是一个循环,那么循环5次的时候,需要中断不继续训练。在C语言中,可以使用break语句进行该操作,代码实现如下:
    运行结果:
    使用break语句时注意以下几点:
    1、在没有循环结构的情况下,break不能用在单独的if-else语句中
    2、在多层循环中,一个break语句只跳出当前循环


    12.结束语句之continue语句
    在我们生活中,可能会由于某中原因需要中断当前的事情,过一会还能继续进行。如:小明今天篮球训练,需要运球10次,当运到5次的时候,突然来电话了,然后接完电话回来继续训练。
    我们可以将运球看成是一个循环,那么循环5次的时候,需要中断后继续训练。在C语言中,可以使用continue语句进行该操作,代码实现如下:
    运行结果:
    continue语句的作用是结束本次循环开始执行下一次循环
    break语句与continue语句的区别是:break是跳出当前整个循环,continue结束本次循环开始下一次循环。 

    注意:continue是重新返回再进行一次循环。


    13.分支结构之switch语句
    C语言还提供了一种用于多分支选择的switch语句,它的用处也不少,例如:小明对自己每周的学习和生活制定了计划方案,每天应该做什么都详细规划。
    switch语句结构如下
    其执行顺序如下图:
    例子代码实现:
    在使用switch语句时还应注意以下几点:
    1、在case后的各常量表达式的值不能相同,否则会出现错误。case后面必须是整型类常量
    2、在case子句后如果没有break;会一直往后执行一直到遇到break;才会跳出switch语句。
    运行结果: 学英语学C语言好好休息 
    3、switch后面的表达式语句只能是整型或者字符类型
    4、在case后,允许有多个语句,可以不用{}括起来。
    5、各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
    6、default子句可以省略不用。


    14.臭名远扬之goto语句
    大家平时出门的时候都会有个目的地,我今天要去哪哪哪,然后就去了。
    那么C语言中也有这样的语句,就是goto语句,goto语句是一种无条件分支语句,goto 语句的使用格式为:
         goto 语句标号;
    其中语句标号是一个标识符,该标识符一般用英文大写并遵守标识符命名规则,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。
    goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在特定情况下,可以使用goto语句来提高程序的执行速度,所以还是少用为妙。
    例如:用goto语句和if语句构成循环求10以内的数之和。
    运行结果为: sum=55 





    展开全文
  • //按先序次序输入二叉树中结点的值(一个字符)࿰c;创建二叉链表表示的二叉树T char ch; cin >> ch; if(ch=='#') T=NULL; //递归结束࿰c;建空树 else{ ...
  • p 打印某个量的值或者执行一个函数调用 b. 在目标代码中直接加入性能工具函数的调用,该方法就是在程序代码中直接加入调试函数的调用。 两种方式都需要对目标程序重新编译,加入对性能工具的库依赖。对于前者,他的...
  • c程序之结构语句

    千次阅读 2016-04-20 13:40:04
    其语义是:如果表达式的值为真,则执行的语句,否则不执行该语句。 其过程可表示为下图 那么考试成绩如果为100分,给买玩具。用代码就可以表示为: 注意:if()后面没有分号,直接写{} 二:分支...
  • 其语义是:如果表达式的值为真,则执行的语句,否则不执行该语句。其过程可表示为下图 那么考试成绩如果为100分,给买玩具。用代码就可以表示为: 注意:if()后面没有分号,直接写{} 2.分支结构之简单if-else...
  • 随着代码的不断优化和越来越多功能引入࿰c;thunks 已完全超越 Promise࿰c;Promise 能实现业务逻辑࿰c;thunks 都能实现࿰c;而 thunks 能实现很多功能࿰c;Promise 却无能为力࿰c;更重要...
  • 同学打包代码

    2012-06-22 13:48:26
    执行一次吃饭、学习、运动、化妆活动,学生状态变化如下: 男生: 体重增量:食物数量 * 单位食物增加体重 – 学习时间 * 单位学习时间减少体重 – 运动时间 * 单位运动时间减少体重 金钱:食物数量 * ...
  • 4.将exitBtn 单击效果设为退出程序,关联如下: 5.右击登录按钮选择go to slot,再选择clicked(),然后进入其单击事件槽 函数,写入一句 void loginDlg::on_loginBtn_clicked() { accept(); } 6.改写main.cpp:...
  • ASP.NET网页代码模型及生命周期

    热门讨论 2009-07-28 14:22:11
    在.aspx页面中,代码隐藏页模型.aspx页面代码基本上和单文件页模型的代码相同,不同是在script标记中单文件页模型的代码默认被放在了同名.cs文件中,.aspx文件示例代码如下所示。 “C#” AutoEventWireup=...
  • MFC的程序框架剖析

    2015-03-05 09:53:19
    一个句柄是指使用一个唯一整数,即一个4字节(64位程序中为8字节)长数值,来标识应用程序不同对象和同类对象中不同实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序...
  • 5、保存hello.sh,给予hello.sh拥有者可读、可写和可执行的权限,同组可读可执行,其他人可执行权限。 6、输入./hello.sh,观察程序输出效果。 7、进入testuser用户主目录,在这个目录下创建hello.sh软...
  • 还曾记得小时候,每当快考试的时候,...简单if语句的基本结构如下:其语义是:如果表达式的值为真,则执行的语句,否则不执行该语句。 其过程可表示为下图那么考试成绩如果为100分,给买玩具。用代码就可以表示...
  • 1 mount:调用DefineDosDevice在应用层创建一个指向设备命名空间符号链接,用CreateFile打开此链接,然后调用DeviceIoControl,控制码是IOCTL_FILE_DISK_OPEN_FILE,内核程序响应执行真正打开源映像文件操作...
  • windows 程序设计

    2011-07-24 21:16:30
    主要区别在于C语言链接库函数机械码连结到您的程序代码中,而Windows函数的程序代码在您程序执行文件外DLL中。 当您执行Windows程序时,它通过一个称作「动态链接」过程与Windows相接。一个Windows.EXE...
  • 4.4.2 实体的所有实例必须包含相同数量的值 104 4.4.3 实体中出现的所有实体类型都必须不同 106 4.4.4 第一范式所避免的不规则编程 106 4.4.5 当前设计不符合第一范式的线索 110 4.5 属性间的关系 111 4.5.1 ...
  • c# 加密和解密相关代码

    热门讨论 2011-09-06 11:04:59
    (3)程序主要代码如下: private void btn_Encrypt_Click(object sender, EventArgs e) { int P_int_Num, P_int_Key; //定义两个类型变量 if (int.TryParse(txt_Num.Text, out P_int_Num) //判断输入是否是数值 &...
  • 实例化一个Perlin对象,您可以生成一个平滑Perlin噪声如下所示: Perlin p; p.noise(x,y,z) 其中x,y,z是表示3D空间中位置浮点。 您还将找到一个FractalNoise类,其功能类似。 不同之处在于分形...
  • 书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握必要知识,并提供了大量实用性很强编程实例。本书目标是使你在C语言程序设计方面由一位初学者成为一位称职程序员。读者基本不需要...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 373
精华内容 149
关键字:

执行如下程序代码后c的值是