代码优化

c语言编译执行过程

天大地大妈咪最大 提交于 2020-01-29 15:58:11
<h4>认识C编译执行过程</h4> 认识C编译执行过程,是C学习的开端。 简单说C语言从编码编译到执行要经历一下过程: C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码。 连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。 执行----->在特定的机器环境下运行C程序。 如果用一个图 来表示: <a href="http://www.emacsvi.com/wp-content/uploads/2015/10/c_compiler_execute.jpg"><img class="alignnone size-medium wp-image-202" src="http://www.emacsvi.com/wp-content/uploads/2015/10/c_compiler_execute-300x233.jpg" alt="c_compiler_execute" width="300" height="233" /></a>   编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 C源程序头文件-->预编译处理(cpp)-->编译程序本身--

代码优化--去掉重复代码

ぃ、小莉子 提交于 2020-01-27 22:04:27
优化前: package com.itedu365.best0601; public class before{ public static void method( ){ // 打印姓名 printContent("3651TEDU"); //打印部门 printContent("YFANN"); } private static void printName(String name){ System.out.println(strObject+ "。"); } private static void printDepart(String depart){ System.out.println(strObject+ "。"); } } 优化后: package com.itedu365.best0602; public class After { public static void method(){ // 打印姓名 printContent("3651TEDU"); //打印部门 printContent("YFANN"); } private static void printContent(String strObject){ System.out.println(strObject+ "。"); } } 以上代码为学习资料上的代码。在我测试优化后的代码时

V8 引擎是如何工作的?

老子叫甜甜 提交于 2020-01-27 21:59:51
V8 引擎是如何工作的? CSDN ​ 已认证的官方帐号 17 人赞同了该文章 作者 | Fundebug 来源|Fundebug 最近,JavaScript生态系统又多了2个非常硬核的项目。 大神Fabrice Bellard发布了一个新的JS引擎QuickJS,可以将JavaScript源码转换为C语言代码,然后再使用系统编译器(gcc或者clang)生成可执行文件。 Facebook为React Native开发了新的JS引擎Hermes,用于优化安卓端的性能。它可以在构建APP的时候将JavaScript源码编译为Bytecode,从而减少APK大小、减少内存使用,提高APP启动速度。 作为JavaScript程序员,只有极少数人有机会和能力去实现一个JS引擎,但是理解JS引擎还是很有必要的。本文将介绍一下V8引擎的原理,希望可以给大家一些帮助。 JavaScript引擎 我们写的JavaScript代码直接交给浏览器或者Node执行时,底层的CPU是不认识的,也没法执行。CPU只认识自己的指令集,指令集对应的是汇编代码。写汇编代码是一件很痛苦的事情,比如,我们要计算N阶乘的话,只需要7行的递归函数: function factorial(N) { if (N === 1) { return 1; } else { return N * factorial(N - 1);

多线程高并发这一篇就够了不用再去别家了

微笑、不失礼 提交于 2020-01-26 14:34:10
  高伸缩性的并发编程是一种艺术,是成为高级程序员的必备知识点之一,最近总结了一下相关方面的知识。    借鉴过得博客有的我也不知道原文作业是谁 https://blog.csdn.net/qq_34337272/article/details/81072874 https://www.cnblogs.com/dolphin0520/p/3932921.html 一、线程 什么是线程? 线程是进程中单一顺序的控制流。 什么是进程? 进程是程序运行的过程。 1、进程与线程的关系: 1)线程是进程的最小执行单元; 2)一个进程中至少存在一个线程; 3)线程决定进程的生命周期 —— 一个线程启动,进程就开始执行;所有线程执行结束,这个进程执行结束; 4)多个线程共享一个进程的内存空间、一组系统资源。 2、进程与线程的区别: 1)每个进程都有自己的独立的内存空间、一组系统资源,而线程共享所属进程的内存空间、一组系统资源; 进程是独立的,同一个进程的线程是有联系的。 2)进程之间通信开销较大,线程之间通信开销较小。 3、多线程 一个进程中可以同时存在多个线程; 同一个进程中的多个线程之间可以并发执行; 多线程的执行方式:抢占式; 抢占CPU资源,计算机由CPU执行程序,只有拥有CPU资源的程序,才会被执行。 CUP资源:CUP的控制权,这个控制权具有时间性,时间长度是随机的;这段时间非常短

最后的性能优化策略[关闭]

大憨熊 提交于 2020-01-25 09:17:09
这个网站上已经有很多性能问题,但我发现几乎所有问题都是针对特定问题而且相当狭窄。 几乎所有人都重复这些建议,以避免过早优化。 我们假设: 代码已经正常工作 所选择的算法对于问题的情况已经是最佳的 已经测量了代码,并且已经隔离了违规的例程 所有优化尝试也将被测量,以确保它们不会使事情变得更糟 我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法。 理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点。 我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容。 #1楼 我花了一些时间来优化在低带宽和长延迟网络(例如卫星,远程,离岸)上运行的客户端/服务器业务系统,并且能够通过相当可重复的过程实现一些显着的性能改进。 措施 :首先了解网络的基础容量和拓扑。 与业务中的相关网络人员交谈,并利用ping和traceroute等基本工具在典型的运营期间(至少)建立每个客户端位置的网络延迟。 接下来,对显示有问题症状的特定最终用户功能进行准确的时间测量。 记录所有这些测量值,以及它们的位置,日期和时间。 考虑在客户端应用程序中构建最终用户“网络性能测试”功能,允许高级用户参与改进过程; 当你处理因表现不佳的系统而感到沮丧的用户时,像这样赋予他们权力可能会产生 巨大的 心理影响。 分析

GCC编译选项

老子叫甜甜 提交于 2020-01-25 08:19:36
转载自http://www.cnblogs.com/xmphoenix/archive/2011/03/21/1989944.html gcc 提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用 -Wall 来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized (only with -O1 and above) -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused

gcc 编译选项

假装没事ソ 提交于 2020-01-25 08:19:14
gcc 提供了大量的警告选项,对代码中可能存在的问题提出警 告,通常可以使用-Wall来开启以下警告: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration -Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized (only with -O1 and above) -Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value -Wunused-variable unused-function:警告声明但是没有定义的static函数; unused-

Linux应用开发入门(转)

风格不统一 提交于 2020-01-25 08:01:54
今天偶然看到这篇文章,做个入门了解还是不错的。 前 一阵子在QQ上和朋友聊天的时候,总会看到有人说Linux上的应用程序开发是高手才可以完成的,而且这种“迷信”在目前似乎还很普遍。然而,情况并不是这样的,从程序库的支持方面,Linux平台为用户级应用程序的开发提供了很多功能强大且丰富的程序库,而且它们大部分是跨平台的(Boost、OpenGL、STL、Qt、Java等)和基于POSIX标准的(glibc等),同时Linux内核还为驱动程序的开发提供了功能完备的内核接口,从开发工具方面,Linux提供了功能强大的编译器GCC和调试器GDB,借助它们的帮助,我们可以很轻松的在Linu x上开发出可移植性的应用程序。既然如此,“迷信”又源于何来呢?我想,一方面由于详细介绍Linux各种开发的书籍较少,各种Linux应用在国内仍不普及,另一方面则是由于很多人在安装好一个Linux后,苦于找不到一个得心应手的IDE环境,从而感到不知所措,毕竟,我们很多人都习惯了写好程序后,按下F5,剩下的任务就让IDE全权代理了。其实想在Linux下如此这般当然也没问题。既然说到了IDE,就让我们从它开始吧,相信选择一个好的IDE环境是你整个学习过程的一个不错的开始。 工欲善其事 必先利其器——IDE篇 其实Linux下有许多功能强大的IDE环境,因为从某种意义上说,Linux是专为开发者准备的操作系统

Java版八荣八耻

旧时模样 提交于 2020-01-24 08:39:07
以动手实践为荣,以只看不练为耻 以打印日志为荣,以出错不报为耻 以局部变量为荣,以全局变量为耻 以单元测试为荣,以手工测试为耻 以代码重用为荣,以复制粘贴为耻 以多态应用为荣,以分支判断为耻 以定义常量为荣,以魔法数字为耻 以总结思考为荣,以不求甚解为耻 多态应用: 动物–叫 鸟-叫—歌唱 狮子-叫–咆哮 猫-叫–喵喵喵 反思,项目里的抽象和继承往往需要花比较多的时间来思考,在真实业务场景中,要先完成实现,再做代码结构的优化,往往在完成了一大堆的ifelse之后,再来做这种层面的优化,工作量基本相当于再写一遍,做的人也比较少。 实例分析: Position ClosePosition ForwardPosition OpenPosition 这三个对象,从理论上来说是可以通过多态来做的,但在真实项目中就是采用了一个position,并使用不同的变量名来做区分, ifelse使用得非常之多。 现在来分析,重构该怎么做,会优化多少? 首先position提供公共的方法,由三个子类去实现,在service层只要将对象转为对应的子类就能完成。 很显然,代码会变成这样 Position p; if (A) p=new ClosePosition(); else if (B) p=new ForwardPosition(); p.add(trade); 优点:公共的代码可以放在父类的方法里

Android 代码优化点滴

天大地大妈咪最大 提交于 2020-01-23 02:13:01
MVC 模型:Mode,View,Controller与view相关的类:DragLayer (自定义的帧布局DragLayer 包含hotseat ,workspace ,和DragController , DragListener 等一起使得桌面上的shortcut具备拖动功能,和DropTarget一起具备删除功能 桌面拖动,删除的处理:将workspace 和DragLayer通过一些接口:DropTarget, DragSource, DragScroller配套完成,DragLayer 和DragController 操纵以上接口类,在workspace 去实现具体)àworkspace(自定义的类似pageview,自己可以snapToPage,即可在不同的cellLayout之间切换,同时实现拖动,触摸等接口,做具体的动作)à cellLayout(默认一个workspace 包含两个cellLayout,可以增加,删除 )à ShortcutAndWidgetContainer(在cellLayout 中,真正是它来确定桌面上的Shortcut 的位置,大小等)à (ShortcutInfo,FolderInfo) 与Mode 相关的类:LauncherProvider 提供和数据库直接操作相关的接口,LauncherModel 非UI线程(后台线程