PHP源码中EXPECTED和UNEXPECTED的作用

2023-05-16

经常能在源码中很多分支条件判断加了这两个宏,了解具体的作用。

例如:

	if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) {
		ZVAL_COPY(&tmp_member, member);
		convert_to_string(&tmp_member);
		member = &tmp_member;
		cache_slot = NULL;
	}
#if PHP_HAVE_BUILTIN_EXPECT
# define EXPECTED(condition)   __builtin_expect(!!(condition), 1)
# define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
#else
# define EXPECTED(condition)   (condition)
# define UNEXPECTED(condition) (condition)
#endif

__builtin_expect是 GCC 编译器的一个内置宏,原型是

long __builtin_expect(long exp, long c);

函数的用法是:

  • exp函数返回值
  • 告诉编译器期望 exp 等于 c

EXPECTED 预期望结果

UNEXPECTED 不期望结果

UNEXPECTED和EXPECTED 就是预测分支结果来预先读取分支指令,增加代码的执行效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP源码中EXPECTED和UNEXPECTED的作用 的相关文章

  • 使用 php 执行 *.sql 文件

    我需要执行一个 sql 文件 其中大约有 48 个要创建的表 它由注释和以 结尾的sql命令组成 有没有办法运行这些 sql 命令 将它们立即转换为单个字符串 我的意思是我需要使用 php 立即运行整个文件 我可以使用 mysql quer
  • PHPUnit:我如何模拟这个文件系统?

    考虑以下场景 这不是生产代码 class MyClass public function myMethod create a directory path sys get temp dir md5 rand if mkdir path th
  • xpath查询到xpath查询结果

    例如我们有这个 xml a b b a
  • 获取给定月份的所有日期和日期

    想要检索给定月份的所有日期和日期 目前有这个显示当月的所有天数 但我如何解析指定的月份 list array for d 1 d lt 31 d time mktime 12 0 0 date m d date Y if date m ti
  • 用于从 PHP 更新实时
  • 的 jQuery 插件
  • 有没有任何 jQuery 插件可以创建类似实时 feed 的东西推特主页 http www twitter com 使用 PHP 它从 MySQL 数据库获取数据 PHP 文件必须如何 Thanks 您确实不需要为此使用插件 您可以使用 j
  • 通过标签收集自定义帖子类型

    我使用以下代码设置了名为 扇区 的自定义帖子类型 register post type sectors array labels gt array name gt Sectors singular name gt sectors has a
  • Symfony2 - 访问被拒绝(用户未经过完全身份验证)

    我正在使用 Symfony2 开发一个网站 直到今天 登录没有问题 但现在登录时我没有正确验证 Symfony 分析器将我列为logged in as anon而不是我登录的用户 我还被重定向回登录页面而不是目标路径 登录过程由传统的登录表
  • 一起使用similar_text和strpos

    我想创建一个简单的搜索引擎 在用户输入中查找关键字 我知道我可以使用 strpos 来检查字符串中是否存在单词 但是 我希望用户能够拼写错误的单词 例如 userInput What year did George Washingtin b
  • 如何解决curl php中的HTTP/1.1 400 Bad Request

    我必须打一个 aspx来自 php 代码的页面 url 我试图使用curl 来访问 但出现以下错误并且 url 中没有空格 HTTP 1 1 400 Bad Request Content Type text html charset us
  • PHP 通过 FTP 下载整个文件夹(递归)

    我目前有一个非常大的网站 大小约为 5GB 包含 60 000 个文件 当前主机并没有做太多事情来帮助我将网站转移到新主机 我的想法是在新主机上制作一个简单的脚本 通过 FTP 传输到旧主机并下载整个 public html 文件夹 递归地
  • PHP mcrypt_decrypt - 我可以确定数据是否使用正确的密钥解密?

    我正在编写一个 php 脚本 并使用 mcrypt 来加密 解密任意数据 当我使用另一个密钥解密加密数据时 例如 我输入了错误的密码 输出当然不会被正确解密 如果使用了错误的密钥 我想显示一条错误消息 但我认为很难将输出字符串验证为正确的
  • PHP:删除任何扩展名的文件?

    当用户上传照片时 它会检查他们是否已经拥有一张照片 如果他们这样做 我希望它删除旧的 可以有任何扩展名 然后放入新的 有没有办法在不从数据库获取旧扩展的情况下做到这一点 目前的代码 del members gt prepare insert
  • 无法加载请求的类:会话

    我的配置文件看起来像这样 gt config sess cookie name ci session config sess expiration 7200 config sess expire on close TRUE config s
  • PHP检查字符串是否包含多个单词

    我在互联网上查找了一些可以做到这一点的东西 但它只能用一个词来实现 我正在尝试构建一个脚本来检测我的网站的错误用户名 如果用户名包含数组中的任何单词 则将检测到错误的用户名 这是我编写的代码 但未能运行 bad words array yo
  • facebook graph api 确定用户是否喜欢 url

    如果用户当前登录 Facebook 并喜欢当前页面 我想显示不同的消息 我明白 FB Event subscribe edge create function response you like this 当用户喜欢该页面时 它将触发 但是
  • 通过 AJAX 加载 Google Maps API,控制台错误

    我正在使用 jquery javascript ajax 和 php 构建一个完全动态的网站 当我单击导航链接时 浏览器会使用 ajax 打开该页面 所以基本上所有页面都加载在同一个index php 中 如果我转到 位置 选项卡 其中有谷
  • 运行 php 脚本的 Bash 脚本

    我有一个 php 脚本 我想使用 bash 脚本运行它 所以我可以使用 Cron 每分钟左右运行 php 脚本 据我所知 我需要创建 bash 脚本来处理 php 脚本 然后我才能使用 Cron 工具 计时器 到目前为止 我被告知我需要输入
  • 调用需要很长时间执行的.php时如何解决“mod_fastcgi.c.2566意外的文件结束(可能是fastcgi进程死亡)”?

    在我的 php 应用程序中 我恢复 db2 数据库 它工作正常 但这里有一个巨大的 2 9GB 最后是500 Internal Server Error 我使用 exec 从 php cp db2 等运行 unix shell 命令 从 f
  • Disqus API 创建帖子错误

    我在使用 Disqus API 尝试对 tumblr 中发布的出版物发表评论时遇到问题 这是代码
  • 如何捕获 PHP 中的 cURL 错误

    我在用PHP curl功能 https php net manual en ref curl php将数据从我的本地计算机发布到网络服务器 我的代码如下 c curl init curl setopt c CURLOPT URL url c

随机推荐

  • Windows11镜像下载及安装

    现在微软已正式推出Windows 11预览版系统 xff0c 目前最新系统版本是22000 71 xff0c 正式版可能会在10月份推出 xff0c 届时拥有正版Windows 10系统的就可以通过Windows Update工具免费在线升
  • ROS2安装及基础知识介绍

    ros介绍 ROS xff08 Robot Operating System xff09 是一个开源的机器人操作系统 xff0c ROS系统是由大量节点组成 xff0c 其中任何一个节点都可以通过发布 订阅的方式与其他节点进行通信 举个栗子
  • Ubuntu Gnome GTK程序开机启动

    启动图标准备 GTK程序 开机启动需要首先制作desktop文件 例如 myapp autostart desktop 如下 xff1a Desktop Entry Encoding 61 UTF 8 Name 61 App Comment
  • 学习记录

    最近打算用visio画个流程图 xff0c 看看会不会遇到什么坑 1 最近打算用visio画几个流程图 xff0c 遇到什么问题在记录一番 2 分析学习一下系统权限的分配 xff0c 做到可以配置权限 xff0c 灵活一些 用户 gt 角色
  • 计算机专业学生,大三了找技术岗,怎么写一份好简历?内附269份简历模板

    计算机专业学生 xff0c 大三了找技术岗 xff0c 怎么写一份好简历 xff1f 内附269份简历模板 大家好 xff0c 我是好好学习 xff0c 天天编程的博主 xff0c 一个每天在互联网上种菜和砍柴的程序员 因为疫情的影响 xf
  • Digest Authentication 摘要认证(转载)

    原文 Digest Authentication 摘要认证 weixin 34007906的博客 CSDN博客 摘要 式认证 xff08 Digest authentication xff09 是一个简单的认证机制 xff0c 最初是为HT
  • 面试问到 Promise,这样回答最完美了

    promise是什么 xff1f Promise是异步编程的一种解决方案 xff0c 比传统的回调函数和事件更合理和强大 所谓Promise xff0c 简单来说就是一个容器 xff0c 里面保存着某个未来才会结束的事情 xff08 通常是
  • Linux编译安装内核

    0 前言 Linux系统中可同时安装多个内核镜像 xff0c 启动时选其一运行即可 xff0c Ubuntu14 04安装Linux内核 介绍了通过apt get工具安装内核的方法 xff0c 本文将介绍如果由源码安装新内核 验证版本 xf
  • Ubuntu 16.04 上用RealSense ZR300跑Vins Mono

    Ubuntu 16 04 上用RealSense ZR300跑Vins Mono 这篇博客主要讲使用RealSense ZR300运行Vins Mono xff0c 主要包括 xff1a xff08 1 xff09 ROS上RealSens
  • 一文熟悉golang编写k8s应用部署工具

    背景 xff1a 在上篇文章里 xff0c 完成了一个简陋的spring cloud 43 k8s的应用系统 xff0c 那么如果手工部署的话 xff0c 那得分别打包5个服务 xff0c 打5个镜像 xff0c 然后安装5个服务 凡是麻烦
  • jdk11安装后不自动安装jre的问题

    回寝之后我又重新自己从头配置了一遍jdk11 关于jdk11安装后不自动安装jre的问题 xff1a 虽然安装jdk11之后可以运行java version查看版本 xff0c 但还是感觉很奇怪 查了一下 xff0c 现在的jdk本身也包含
  • 说说家乡的互联网-江西龙南

    刚好在CSDN查资料 xff0c 看到这个征文 xff0c 勾起年少回忆 xff0c 遂写下此文 2003年 xff0c 我刚上初一 xff0c 学校开设了微机课 xff0c 我第一次接触了互联网 十一 xff0c 二岁的孩子对新事物充满了
  • Python 内部函数修改外部变量的值报错

    今天写题时遇到了这样一个问题 xff1a UnboundLocalError local variable 39 total 39 referenced before assignment 错误出现在我试图通过内部函数修改外部变量的值 xf
  • go get xxx: disabled by GOPRIVATE/GONOPROXY解决方案

    go拉包比如go get的时候出了这个错 xff0c 资料比较少 xff1a disabled by GOPRIVATE GONOPROXY 长话短说 xff0c 解决方案 xff1a 给你的GOPROXY加上direct xff0c 注意
  • Window10系统安装V-rep教程(有百度网盘文件包)

    Window10系统安装V rep教程 64 meng 看了很多教程 xff0c 都没有找到适合Windows10的V rep安装教程及安装包 xff0c 官网上又那么慢 xff08 最近更新了篇博客 xff0c 大家需要其他版本的请移步
  • Integer和int的区别

    Integer是int的包装类 int是基本数据类型 最主要的区别就是这句 一个是基本数据类型 一个是类 但其实其中隐含的细节很多 比如 Integer的默认初始值是null xff0c 而int的默认初试值是0 Integer变量必须先实
  • 如何配置Filebeat收集日志文件

    Filebeat7 6 日志输入 filebeat inputs type log paths var log log var path2 log 您可以添加额外的 配置设置 xff08 如fields xff0c include line
  • 在 Mac 上的“照片”中删除照片或恢复删除的照片

    从图库中删除照片和视频后 xff0c 它们会放在 最近删除 相簿中并保留所显示的天数 xff0c 然后才会永久删除 您可以在该时间段结束前恢复项目 如果打开了 iCloud 照片 xff0c 您可以在 30 天内从 iCloud 恢复照片和
  • php获取数组第一个和最后一个元素的key

    PHP 7 3 0之前的版本获取数组第一个和最后一个元素的key的几种方法 span class token variable a span span class token operator 61 span span class toke
  • PHP源码中EXPECTED和UNEXPECTED的作用

    经常能在源码中很多分支条件判断加了这两个宏 了解具体的作用 例如 xff1a span class token keyword if span span class token punctuation span span class tok