首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >什么是必要的符号延伸?

什么是必要的符号延伸?
EN

Stack Overflow用户
提问于 2012-10-02 06:25:09
回答 4查看 513关注 0票数 2

考虑下面的C代码-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char sum_char(char a,char b)
{
   char c = a+b;
   return c;
}

它涉及到-

  1. 将第二个参数转换为签名扩展。
  2. 在堆栈上将有符号扩展参数推送为b。
  3. 将第一个参数转换为签名扩展。
  4. 将有符号扩展参数推送到堆栈上。
  5. 添加a& b,结果强制转换为char,并将其存储在c中。
  6. C再次签延。
  7. 符号扩展c被复制到返回值寄存器和函数返回给调用者。
  8. 要存储结果调用函数,再次将int转换为char。

我的问题是-

  1. 是谁干的?
  2. 有什么必要做这么多的转变?
  3. 它会降低/提高机器/编译器的性能吗?
  4. 如果它正在降低性能,我们应该做些什么来提高它呢?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-02 06:32:45

  1. 这么多转换的必要性是什么?--为了确保结果在多个C编译器支持的多个平台上的一致性,转换是必要的。
  2. 会降低/增加机器/编译器的性能吗?--与“不做任何事情”相比,这会降低性能,但是没有人会注意到这一点。
  3. 如果正在降低性能,我们应该做什么来提高性能呢?- Nothing:如果必须在chars上执行算术操作,则在chars上执行算术操作。让优化器负责删除平台上所有不必要的指令。在大多数情况下,CPU具有与C语言所要求的语义兼容的指令,因此生成的代码将非常短。

当然,如果不需要对签名字符执行操作,则可以对无符号字符执行操作。这就消除了大量的符号扩展。

票数 2
EN

Stack Overflow用户

发布于 2012-10-02 06:28:44

您描述的转换仅在抽象机器中执行。如果编译器导致相同的可观察行为,则可以将所有这些都快捷。

当打开优化时,我的编译器将其转换为以下汇编程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sum_char:
.LFB0:
    .cfi_startproc
    leal    (%rsi,%rdi), %eax
    ret
    .cfi_endproc
.LFE0:
    .size   sum_char, .-sum_char

这只是一个加法(隐藏在leal指令中)和一个ret跳转。

票数 2
EN

Stack Overflow用户

发布于 2012-10-02 06:28:27

  1. 代码运行时。编译器生成实现编程语言指定语义所需的代码。
  2. 我不确定你说的是“堆栈”,据我所知,C中没有这样的要求。
  3. 这是没有道理的,与什么相比?
  4. 您可以尝试删除无意义的c变量,只需使用return (char) (a + b);。尽管如此,我不认为在这个函数中有太多需要“优化”的地方。它应该编译成很少的代码。如果你能得到它的内联,它很可能是按一个指令。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12692209

复制
相关文章
​为什么在Jetson Orin上使用DLA是必要的?
NVIDIA的DLA硬件是专门用于深度学习操作的固定功能加速器引擎。它旨在对卷积神经网络进行全硬件加速,支持各种层,如卷积、反卷积、全连接、激活、池化、批量归一化等。NVIDIA的Jetson Orin SoC最多支持2个第二代DLA(第二代DLA在功耗效率方面表现最佳),而Xavier SoC最多支持2个第一代DLA。
GPUS Lady
2023/09/07
1.1K0
​为什么在Jetson Orin上使用DLA是必要的?
面试题18:什么是符号引用?什么是直接引用?
在解析阶段会有一个步骤,将运行时常量池当中二进制数据当中的符号引用转化为直接引用的过程。
爪哇缪斯
2023/05/09
1K0
面试题18:什么是符号引用?什么是直接引用?
redis延伸
redis 中有类似于事务的东西,保证事务执行时不被其他客户端发来的请求中断。但是和关系数据库并不相同。它的事务不支持回滚操作,因此在统一执行事务中所有命令时,即使有一条失败,之前执行过的命令仍然生效。
小闫同学啊
2020/03/26
3160
StackOverflow上87万访问量的问题:什么是“找不到符号”?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。为了输出更好的内容,我就必须先输入更多的内容,于是我选择 Stack Overflow 作为学习的第一战线,毕竟很多大牛都在强烈推荐。本篇文章,我们来探讨一下访问量足足有 87+ 万次的问题——什么是“找不到符号”,它是什么意思,它是如何发生的,以及如何修复它。
沉默王二
2020/02/19
1.6K0
StackOverflow上87万访问量的问题:什么是“找不到符号”?
Kano-延伸
•必备需求:当优化此需求,用户满意度不会提升,当不提供此需求,用户满意度会大幅降低; •期望需求:当提供此需求,用户满意度会提升,当不提供此需求,用户满意度会降低; •魅力需求:用户意想不到的,如果不提供此需求,用户满意度不会降低,但当提供此需求,用户满意度会有很大提升; •无差异需求:无论提供或不提供此需求,用户满意度都不会有改变,用户根本不在意; •反向需求:用户根本都没有此需求,提供后用户满意度反而会下降。
葆宁
2022/01/06
1380
Kano-延伸
为什么边缘计算在数据驱动的世界中是创新的必要条件?
边缘计算使处理和存储资源更接近数据的创建和消费点,缩短了基本数据传输的距离。最大限度地减少了网络延迟,提高了数据检索和利用的速度,缓解了带宽拥塞,并降低了支持大量数据移动性的成本。边缘计算正在推动各个领域的变革。更快的数据驱动洞察周期允许在更短的时间内开发更具创新性的商品、应用程序和数字体验。这会带来更多的收入、更好的客户服务、更少的开支和更有效的运营。
静一
2021/07/30
4910
什么是死锁?死锁发生的四个必要条件是什么?如何避免和预防死锁产生?
什么是死锁?   死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。   例如,在某个计算机系统中只有一台打印机和一台输入 设备,进程P1正占用输入设备,同时又提出使用打印机的请求,但此时打印机正被进程P2 所占用,而P2在未释放打印机之前,又提出请求使用正被P1占用着的输入设备。这样两个进程相互无休止地等待下去,均无法继续执行,此时两个进程陷入死锁状
Kevin_Zhang
2018/05/22
4.8K0
二分查找的延伸
举个栗子:对数组序列{1,3,3,3,6}(下标从0开始)来说,若查询3,则得到L=1、R=4。 如果查询8,则得到L=R=5。 如果序列中没有x,那么L和R也可以理解为假设序列中存在x,则x应当在的位置。
可定
2020/04/20
4540
兼容 EVM 是所有公链的必要选择吗?
从目前来看,在排名靠前的公链中兼容 EVM 的已经大约占到了70%;但在这个大多数公链都拥抱 EVM 的时代,依然有30%的公链并没有兼容 EVM,坚守自己的虚拟机,比如 Solana 和 Terra。
本体Ontology
2022/03/29
7040
兼容 EVM 是所有公链的必要选择吗?
并行创建主键的问题延伸
《使用并行创建主键约束的“奇葩”过程》这篇文章发到技术讨论群,得到了很多朋友的建议和反馈,更深层次地对问题进行了理解。
bisal
2019/04/19
5510
让工具成为双手的延伸
他们面临问题时,在解决方案中透露出务实的态度、风格、理念。他们总是越过问题的表面,试着将问题放在更宽泛的大环境下综合考虑。他们为所做的一切负责,责任感驱使着务实派的程序员,在软件的熵中,保持项目的有序。
Zilliz RDS
2021/12/15
4660
让工具成为双手的延伸
HttpRunner3的$符号是如何解析的
符号在很多测试框架中都会拿来用做变量解析,大名鼎鼎的JMeter就有这个用法。HttpRunner3也支持符号,比如:
dongfanger
2022/05/09
5170
HttpRunner3的$符号是如何解析的
网站设置301跳转的必要性是什么?
在网站运营过程中,经常会遇到需要更改网页URL或整体迁移网站的情况。为了保持用户体验和搜索引擎优化(SEO),我们需要正确设置301跳转。本文将介绍301跳转的概念、必要性以及如何设置301跳转。
海拥
2023/06/27
5570
网站设置301跳转的必要性是什么?
div拖拽实现延伸
div拖拽 原理: 鼠标事件 mousedown mousemove mouseup 注意事项: 被拖动的div的position属性值一定是absolute。 onmousedown事件需要在window.onload时加载。 如果被拖动的div上有文字会有自带的文字拖动效果,需要将改div上的所有拖动事件绑定在该div上,可以使用setCapture。 代码: html&css: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT
从入门到进错门
2018/08/21
1.3K0
机器学习中基本的数学符号是什么?
本文介绍了机器学习中的基本数学符号。具体来说有算数符号,包括各种乘法、指数、平方根以及对数;数列和集合符号,包括索引、累加以及集合关系。此外,本文还给出了 5 个当你在理解数学符号遇到困难时可以应急的小技巧。 在机器学习中,你永远都绕不过数学符号。 通常,只要有一个代数项或一个方程符号看不懂,你就完全看不懂整个过程是怎么回事了。这种境况非常令人沮丧,尤其是对于那些正在成长中的机器学习初学者来说更是如此。 如果你能了解一些基本的数学符号以及相关的小技巧,那你就在看懂机器学习方法的论文或书籍描述上前进了一
机器人网
2018/04/12
2.5K0
机器学习中基本的数学符号是什么?
阻止a标签的默认事件及延伸
先贴一段代码 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <a href="http://www.baidu.
吴裕超
2018/03/01
2.6K0
什么是权限?什么是角色?什么是用户?
什么是用户? 比如我陈业贵 什么是角色?比如系统管理员这个身份。 什么是权限? 删除日志就是一个日志管理权限,添加用户就是一个用户管理权限 比如可以 他们之间的关系是: 系统管理员有删除
贵哥的编程之路
2022/07/04
3.2K0
只在必要时间生产必要数量的必要产品—丰田JIT
众所周知,JIT(Just In Time)是丰田生产方式的两大支柱之一,其强调的是“只在必要的时间,生产必要数量的必要产品”,但是这听起来容易,做起来难。要实现JIT,必须深刻理解JIT的内涵,然后分阶段去实施:
用户9972271
2022/12/21
5520
java文档注释符号_java的注释符号
标识符可以简单的理解成一个名字。 在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符,一个正确的标识符需要遵循以下规则:
全栈程序员站长
2022/11/10
10.3K0
java文档注释符号_java的注释符号
c语言中‘ ? ’符号是什么意思?
c语言中 ? 符号是什么意思? c语言中?:是什么意思? ?表示的是对结果的判断 : 表示的是对结果的选择 二者同时出现,构成结构选择语句。 条件运算符 (?:) 是C语言中唯一的一个三目运算符,它
吃猫的鱼Code
2023/02/02
4.7K0

相似问题

性状延伸(A => B)是性状延伸功能吗?

20

为什么"${1:-}“是必要的?

11

为什么CMake是必要的?

10

为什么PropertyState是必要的

10

为什么XmlNamespaceManager是必要的?

65
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文