在linux下怎么把怎么把"熟练"linux vi 替换字符串成"精通

11-2911-2911-2911-2911-2911-2911-2911-2911-2911-29最新范文01-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-01问一下大型网站的&url&如何实现的 - PHP进阶讨论_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
问一下大型网站的&url&如何实现的 - PHP进阶讨论
我看到sohu与sina的url都是 \&模块名+域名\&如sina的blog是\& 谁知道这是怎样实现的吗?是用url rewrite还是二级玉名或者别的方法?还有sohu的更酷,其blog 的url是\& 不知是怎么做的,又怎样映射到处理程序的?[[i] 本帖最后由 phpdd66 于
09:33 编辑 [/...
我有更好的答案
.你要先激活泛解析模块.建议不要在Windows下玩..转linux吧....
我也看了下,知道是泛解析,但如何真正实现呢?
为您推荐:
其他类似问题
php的相关知识
换一换
回答问题,赢新手礼包 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
DEBIAN GNU/LINUX 6 0 ("SQUEEZE"), 32-BIT PC 的发行说明
下载积分:30
内容提示:DEBIAN GNU/LINUX 6 0 ("SQUEEZE"), 32-BIT PC 的发行说明
文档格式:PDF|
浏览次数:0|
上传日期: 06:28:21|
文档星级:
全文阅读已结束,如果下载本文需要使用
 30 积分
下载此文档
该用户还上传了这些文档
DEBIAN GNU/LINUX 6 0 ("SQUEEZE"), 32-BIT
关注微信公众号天下网吧-网吧论坛-网吧技术-网吧增值联盟-网咖论坛 -
Powered by Discuz!
请联系管理员,帖子ID:360436您好,天下网吧-网吧论坛-网吧技术-网吧增值联盟-网咖论坛提醒您:本站已设置前的帖子暂时无法访问,,您可以浏览以下网吧网站||
如有急事,您也可以加入天下网吧官方QQ群: 600460讨论网吧问题,请手打+注明加群理由,不然不会通过加群请求的!你也可以加微信号txwbtx,然后聊天注明申请加入天下网吧微信群。全是网吧和网咖行业人士才能进入哦!欢迎大家扫码关注天下网吧官方微信公众号
下载天下网吧手机APP
天下网吧论坛对因此设置给大家带来不便,深感歉意!今天看啥 热点:
gcc/linux内核中likely、unlikely和__attribute__(section(&&))属性,gccattribute查看linux内核源码,你会发现有很多if (likely(""))...及if (unlikely(""))...语句,这些语句其实是编译器的一种优化方式,具体分析如下:
likely及unlikely是一个宏定义:
#define likely(x)& __builtin_expect(!!(x), 1)
#define unlikely(x)& __builtin_expect(!!(x), 0)
likely()的 意思是认为这个分支最有可能发生,如if (likely(x == 0)){...},这个语句表示x等于0最有可能发生,其实语意就相当于if (x == 0){...},只不过likely针
对程序指令运行做了优化,不去做一些无谓的指令跳转;unlikely()意思相反,就是最不可能发生,注意if (unlikely(x == 0))还是相当于if (x==0)的逻辑。
如果需要更进一步了解likely()就必须要深入了解__bulitin_expect(!!(x), 1)函数。
& Built-in Function: long __builtin_expect (long exp, long c)
You may use __builtin_expect to provide the compiler with branch prediction information. In general, you should prefer to use actual profile feedback for this (-fprofile-arcs), as programmers are notoriously bad at predicting how their programs actually perform.   However, there are applications in which this data is hard to collect.
The return value is the value of exp, which should be an integral expression. The semantics of the built-in are that it is expected that exp == c. For example:
if (__builtin_expect (x, 0))
indicates that we do not expect to call foo, since we expect x to be zero. Since you are limited to integral expressions for exp, you should use constructions such as
if (__builtin_expect (ptr != NULL, 1))
foo (*ptr);
when testing pointer or floating-point values.
文档链接:https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html#Other-Builtins
从gcc官方文档来看,内建函数long __builtin_expect (long exp, long c)主要用于优化程序的分支预测,减少程序的指令跳转,现代处理器一般都是流水线架构,
很多芯片级的优化是靠流水线预取完成的,所以我们的程序优化也是需要尽量减少跳转。
文档也提到了由于大部分程序员根本就不了解自己程序的运行情况,所以推荐我们在编译时加上-fprofile-arcs选项去评估我们的程序分支运行情况;-fprofile-arcs选
项是代码覆盖率测试工具gcov使用时需要增加的编译选项,gcov能够去统计及分析我们的程序的分支运行情况,关于gcov的使用这里不做介绍,只需要知道gcov是
一个测试统计工具,配合-fprofile-arcs工具使用,__builtin_expect 根据gcov的分析结果来做实际的分支预测优化。
这里可以大家还会有疑问,为什么#define likely(x)& __builtin_expect(!!(x), 1)中要使用!!(x),这其实是因为函数__builtin_expect (long exp, long c)期望是
exp == c,这时的1相当于bool值true,所以exp需要是一个bool表达式,通过!!可以变成bool表达式而不改变原有函数,这样才能够正确的与1或0(bool值)做匹配
判断;试想如果没有!!,即#define likely(x)& __builtin_expect((x), 1),那么likely(10)原本是希望表达式是true,但是根据函数的处理逻辑10 != 1,那么优化会
以false的结果来优化,这样就阴差阳错了!!!
最后讲述一下__attribute__(section(""))属性,这个属性比较好理解,就是为某个函数或变量指定section,比如:
int __attribute__(section(".test.data")) value = 0;
这样的话变量value将会被放在.test.data段中;
void __attribute__((section(".test.text"))) func(void){}
这样函数func会被放入.test.text段中。
查看section信息可以通过如下命令:readelf -S xxx,可以查看可执行文件也可以是目标文件.o,关于section这里不过多介绍,只要大概知道一般我们的代码都是
放在.text段,全局变量一般放在.data段,我们通过__attribute__((""))定义的符号就放在我们特定的section里面。
暂无相关文章
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&
Linux教程最近更新}

我要回帖

更多关于 熟练掌握linux 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信