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

农村电商网站建设方案/网络营销方法有哪些举例

农村电商网站建设方案,网络营销方法有哪些举例,平面设计属于什么专业,做免费网站教程国vs我们知道在C语言编译时,有那么几个常用的优化编译选项,分别是-O0,-O1,-O2,-O3以及-Os。之前一直觉得既然是优化选项,顶多是优化一下逻辑,提高一些效率或者减少一下程序大小而已。很少会觉得它们会影响程序的最终结果。直到最近在A…

我们知道在C语言编译时,有那么几个常用的优化编译选项,分别是-O0,-O1,-O2,-O3以及-Os。之前一直觉得既然是优化选项,顶多是优化一下逻辑,提高一些效率或者减少一下程序大小而已。很少会觉得它们会影响程序的最终结果。直到最近在ARM平台上发现一个程序里的一个bug,才觉得这些优化选项有时候也没那么智能。或者说针对ARM平台,还没有那么智能。

首先看这么一段程序,此程序是我将问题简单化的程序:

#include

#include

int main()

{

char buffer[1024] = {0,1,2,3,4,5,6,7};

int iTest = 0x12345678;

int *p = (int *)(buffer + 7);

memcpy(p, &iTest, sizeof(iTest));

printf("%x\n", buffer[6]);

printf("%x\n", buffer[9]);

return 0;

}

乍看之下,觉得这个程序没啥问题。然后我们将此程序文件名称叫point.c。然后分别用交叉编译链进行如下编译:

arm-xxx-linux-gcc point.c -o point0 -O0

arm-xxx-linux-gcc point.c -o point1 -O1

arm-xxx-linux-gcc point.c -o point2 -O2

最终再分别执行三个程序,结果却有点出人意料:

./point0

6

34

./point1

34

0

./point2

6

0

只有在-O0,也就是没有优化的情况下,结果才和假想的一致。但是同样的问题在x86平台上却没有问题。

于是我通过用以下命令,分别来生成不同优化选项下的汇编代码,来确定在ARM平台上编译到底出了什么问题。

arm-xxx-linux-gcc point.c -o point0.s -O0 -S

arm-xxx-linux-gcc point.c -o point1.s -O1 -S

arm-xxx-linux-gcc point.c -o point2.s -O2 -S

然后对比三个汇编的代码,发现问题出在memcpy这句话上。

在point0.s中,程序是老老实实的调用的memcpy,然后就将0x12345678老老实实按照字节一个个的放到了buffer+7的位置。

而在point1.s中程序则是没有调用memcpy,而是用的语句:

str        r3, [sp, #7]

而此时r3中存储的就是0x12345678;而由于我采用的ARM平台是32位的,此语句执行时,地址线应该不会发生变化,所以最终的结果是buffer+4到buffer+7的数据被覆盖了,而不是buffer+7到buffer+10的数据被修改。

而在point2.s中,貌似又针对流水线进行了优化,程序执行顺序会有所变化,在对buffer部分位置赋初值的顺序是在str  r3, [sp, #7]之后,所以buffer+6处的数据反而是正确的6。

分析到这儿,也许有人会说写个简单的程序,都会因为编译的优化选项不同导致结果不同,那这memcpy是不是就不敢用了?

其实一般只要有较好的编程习惯的话,都不会遇到此类问题,比如下面的程序:

#include

#include

int main()

{

char buffer[1024] = {0,1,2,3,4,5,6,7};

int iTest = 0x12345678;

char *p = buffer + 7;

memcpy(p, &iTest, sizeof(iTest));

printf("%x\n", buffer[6]);

printf("%x\n", buffer[9]);

return 0;

}

这段程序其实只是简单的改变了p的类型,就能保证在各种优化下,结果都一样。可见好的编程习惯是有多么的重要。

http://www.lbrq.cn/news/1419391.html

相关文章:

  • wordpress付费查看全文内容/seo百度推广
  • 嘉兴建设网站/适合网络营销的产品
  • 注册完域名后如何做网站/在线h5免费制作网站
  • 几个做ppt的网站知乎/seo教程网
  • 做网站为什么没收入/群排名优化软件官网
  • shopbase建站费用/手机如何制作自己的网站
  • 做网站设计需要具备哪些/北京网络营销咨询公司
  • 网站你懂我意思正能量晚上在线下载免费软件魅族/seo网站优化教程
  • 网站注册商是什么/上海百度搜索优化
  • 西安网站制作哪家便宜又好/上海还能推seo吗
  • 公司企业邮箱是什么/网站优化推广公司排名
  • 科技资讯网站开发/企业seo排名外包
  • 海淀区网站制作公司/手机如何制作网页
  • 深圳那家做网站好/宁波pc营销型网站制作
  • 网站开发用的软件/seo优化操作
  • 广州网站建设电话/谷歌浏览器网址
  • 徐州网站制作怎样/什么网站可以发布广告
  • 做网站源代码/海外推广营销 平台
  • 泛搜索wordpress/seo高端培训
  • 建设实业公司网站设计模板/seo零基础入门到精通200讲
  • 兼职做效果图的网站/我要下载百度
  • 厦门百度整站优化服务/广告联盟app推广
  • 网站的开发与维护/免费推广的app有哪些
  • 网站设计要学什么/企排排官网
  • seo公司排行/网站seo诊断分析报告
  • 湖北网站建设多少钱/百度做网站推广的费用
  • 靠做效果图赚钱的网站/微博营销成功案例8个
  • 做网站一定要用服务器吗/百度官方电话号码
  • wordpress+模版仿米拓/宁波seo推广公司排名
  • 网络科技公司网站/网络营销课程培训课程
  • Mysql笔记-错误条件\处理程序
  • 原子操作及基于原子操作的shared_ptr实现
  • 关于原理解析和编程技巧的深度探索!
  • app-4 日志上传
  • PHP现代化全栈开发:实时应用与WebSockets实践
  • java:创建指定容器类型(如ImmutableSet)的Collector对象