首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++文字常量存储在内存中的什么地方?

C++文字常量存储在内存中的什么地方?
EN

Stack Overflow用户
提问于 2012-08-15 07:15:48
回答 3查看 1.8K关注 0票数 1

C++文字常量存储在内存中的什么地方?堆栈还是堆?

int *p = &2

是错误的。我想知道为什么?谢谢

我的问题是“C++常量存储在内存中的什么地方”,"int *p = &2

是错的“,不是我的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-15 07:42:47

细节取决于机器,但假设最常见的机器和操作系统...每个可执行文件都包含几个“段”--代码、BSS、数据和其他一些。

代码包含所有的可执行操作码。实际上,它通常被命名为TEXT,因为不知何故,这在几十年前的人们看来是有意义的。通常它是只读的。

BSS是未初始化的数据-它实际上不需要存在于可执行文件中,而是在程序开始运行时由操作系统的加载器分配。

DATA保存文字常量- int8、int16、int32等,以及浮点数、字符串文字和编译器和链接器关心产生的任何奇怪的东西。这就是你要问的。但是,它只保存定义为用作变量的常量,如

代码语言:javascript
运行
AI代码解释
复制
const long x = 2;

但不太可能保存源代码中使用的文字常量,但与变量没有紧密关联。只有单独的'2‘是由编译器直接处理的。例如在C中,

代码语言:javascript
运行
AI代码解释
复制
print("%d", 2);

将导致编译器构建一个对print()的子例程调用,编写操作码以将指针推送到字符串文字"%d“和值2,两者都是64位计算机上的64位整数(您不是那些仍在使用32位硬件的落后者,对吗?:),然后是跳转到子例程的操作码( 'print‘子例程的标识符)。

"%d“字面量进入数据。2并非如此;它内置于将整数填充到堆栈中的操作码中。这实际上可能是“加载寄存器RAX立即数”,后跟值2,然后是“推送寄存器RAX",或者可能是单个操作码就可以完成这项工作。因此,在最终的可执行文件中,2将在代码(也称为文本)段中找到。

通常不可能使指针指向该值或任何操作码。就像C这样的高级语言所做的事情而言,这是没有意义的(当你谈到操作码和段时,C是“高级”的。) "&2“只能是一个错误。

现在,有一个指向操作码的指针不是完全不可能的。无论何时在C中定义函数,或者在C++中定义对象方法、构造函数或析构函数,都可以将该函数的名称视为指向从该函数编译的机器码的第一个操作码的指针。例如,不带括号的print()是指向函数的指针。也许如果您的示例代码在一个函数中,并且您猜对了偏移量,那么可以使用指针算法来指向位于操作码之间的“立即”值2,但这对于任何当代CPU来说都不容易,对于初学者来说肯定也不容易。

票数 6
EN

Stack Overflow用户

发布于 2012-08-15 08:41:52

让我引用C++03标准的相关条款。5.3.1/2

一元&运算符的结果是指向其操作数的指针。操作数应为左值。

整数字面值是一个右值(然而,我在C++03标准中没有找到直接引用,但C++11在3.10/1中附带提到了这一点)。因此,不可能采用整型文字的地址。

2的确切存储位置如何,这取决于使用情况。它可能是机器指令的一部分,也可能被优化掉了,例如,j=i*2可能会变成j=i+i。你不应该依赖它。

票数 0
EN

Stack Overflow用户

发布于 2012-08-15 09:23:12

您有两个问题:

文字常量存储在哪里?除了字符串文字(它们是实际的对象),几乎在实现所需的任何位置。这通常取决于您对它们做了什么,但是在很多架构中,整数常量(通常还有一些特殊的浮点常量,如0.0)最终会作为机器指令的一部分。当这是不可能的时候,它们通常会被放在与代码相同的逻辑段中。

至于为什么取右值的地址是非法的,主要原因是因为标准这么说。从历史上看,它是被禁止的,因为这样的常量通常不会在内存中作为单独的对象存在,因此没有地址。今天..。人们可以想象其他的解决方案:编译器足够聪明,如果你获取它们的地址,就会把它们放到内存中,而不是其他地方;类类型的r值确实有一个内存地址。这些规则在某种程度上是任意的(不管它们是什么)-hopefully,任何允许获取文本地址的规则都会使其类型为int const*,而不是int*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11965402

复制
相关文章
Apache Tika命令注入漏洞挖掘
这篇文章将从一个Apache tika服务器的命令注入漏洞到完全利用的步骤。CVE是https://nvd.nist.gov/vuln/detail/CVE-2018-1335。由于Apache Tika是开源的,我能够通过分析Apache Tika代码来确定问题。虽然命令注入漏洞通常很简单,但要实现完整的远程代码或命令执行需要克服一些障碍。这是由于Java处理执行操作系统命令的方式以及Apache Tika代码本身的一些特性。但在最后,我们仍然可以使用Cscript.exe来执行操作。
FB客服
2019/06/18
1.6K0
Apache Tika命令注入漏洞挖掘
java中使用tika_Tika基本使用
Tika是一个内容抽取的工具集合(a toolkit for text extracting)。它集成了POI, Pdfbox 并且为文本抽取工作提供了一个统一的界面。其次,Tika也提供了便利的扩展API,用来丰富其对第三方文件格式的支持。
全栈程序员站长
2022/11/16
1.5K0
java中使用tika_Tika基本使用
如何配合代理使用cURL?
本文将分步骤介绍如何配合代理服务器使用cURL或curl。从安装到设置代理的各种选项,面面俱到。
用户7850017
2021/05/18
3.4K0
如何配合代理使用cURL?
使用curl进行服务器测试
curl是一个命令行工具,用于使用Internet协议对指定为URL的资源进行Internet传输。您可以在https://ec.haxx.se/了解更多有关其历史的信息。 在本文中,我们将学习使用curl进行一些简单的服务器测试。
Lemon黄
2020/08/07
1.7K0
如何使用 .htaccess 强制访问 HTTPS
如果你为你的域名安装 SSL 证书,你的下一步应该是配置应用将所有的网络流量通过 HTTPS 传输。
雪梦科技
2020/07/08
4K0
python怎样执行curl命令_如何使用python执行curl命令
通常,我只需要在终端输入命令并按回车键。 但是,我不知道它在python中是如何工作的。
用户7886150
2021/01/17
6.5K0
服务器入侵排除命令
https://attacker.club/detail/33.html https://attacker.club/detail/34.html
以谁为师
2019/05/28
9780
PHP 5.6 如何使用 CURL 上传文件
以前我们通过 PHP 的 cURL 上传文件是,是使用“@+文件全路径”的来实现的:
Denis
2023/04/14
1.9K0
如何使用curl调试openstack的api
访问openstack的API之前,用户使用用户名和密码向keystone进行认证。在通过keystone认证后,keystone会在返回数据中包含一个ServiceCatalog。此ServiceCatalog中包含keystone中的所有service endpoints。用户即可根据这些endpoint来进行后续的RestAPI调用。
虚拟化云计算
2018/04/08
2.4K0
如何使用curl调试openstack的api
Tika简单实例应用
程序说明: 默认可读取10万以内个字符文档,如果文档文件过大,则报错。 org.apache.tika.sax.WriteOutContentHandler$WriteLimitReachedException: Your document contained more than 100000 characters, and so your requested limit has been reached. To receive the full text of the document, increase your limit. (Text up to the limit is however available). 解决办法: 通过BodyContentHandler()有参构造器,设置更大的字符数限制。比如10 * 1024 * 1024,可读取1000万左右的字符文档。
程裕强
2019/05/27
1.5K0
Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址
 OCR(Optical character recognition) —— 光学字符识别,是图像处理的一个重要分支,中文的识别具有一定挑战性,特别是手写体和草书的识别,是重要和热门的科学研究方向。可惜国内的科研院所,基本没有几个高识别率的训练集——笔者联系过北京语言大学研究生一篇论文的作者,他们论文说有%90的正确识别率,结果只做了20个笔画简单的汉字(20/6753 = %0.3 常用简体汉字的千分之三),然后找了20个学生,各自手写了一遍。真的是为了论文而论文,而且很会选择样本(小而简单)
NaughtyCat
2020/10/09
4.1K0
Tika结合Tesseract-OCR 实现光学汉字识别(简体、宋体的识别率百分之百)—附Java源码、测试数据和训练集下载地址
linux使用curl命令_如何使用curl从Linux命令行下载文件
The Linux curl command can do a whole lot more than download files. Find out what curl is capable of, and when you should use it instead of wget.
用户7886150
2020/12/30
4.7K0
学会了这条 Curl 命令实用小技巧,网站故障秒排除!
curl 命令最常用的参数就是 -I,仅返回头部信息,使用 HEAD 请求,获取的结果如下:
iMike
2019/11/11
6110
学会了这条 Curl 命令实用小技巧,网站故障秒排除!
curl命令使用
一、curl常用命令 这个命令我在linux下用的多一些,windows也可以,可以说是一款很强大的http命令行工具,支持上传、下载等操作,非常莱斯的工具。 1、get请求:并返回resp curl https://www.gaojs.com.cn # 测试请求是否可达:显示一次http通信的整个过程,包括端口连接和http request头信息 curl -v https://www.gaojs.com.cn 2、post请求 # post请求 curl -X -POST https://w
懿曲折扇情
2022/08/24
4.8K0
curl命令使用
curl的使用
curl是常用发起http请求工具,今天就整理下如何正确的使用curl命令,来提高工作效率。
付威
2020/01/21
1.6K0
Mac新手使用技巧——Mac如何强制关机
一般情况下,Mac电脑是非常稳定的,但是偶尔也会碰到应用程序没有响应或死机的情况,那么我们需要强制关机,Mac如何强制关机呢?一起来看看吧!
全栈程序员站长
2022/07/02
1.2K0
Mac新手使用技巧——Mac如何强制关机
[CodeIgniter4]故障排除和本地开发服务器
如果``/mypage/find/apple``类似的URL``/index.php/mypage/find/apple``不起作用,但类似的URL ,则你的``.htaccess``规则(对于Apache)未正确设置。
landv
2020/03/04
4K0
PHP使用curl上传文件到远程服务器接口
笔者个人博客 https://qiucode.cn 欢迎大伙围观哦! 当然你的php.ini开启了curl扩展功能 1、文件上传 /** * 以文件上传 第二种方法 */ public function upload(){ $result = array('code' => 0, 'message' => 'ok'); ini_set('upload_max_filesize', '20M'); ini_set('po
游离于山间之上的Java爱好者
2022/12/18
1.5K0
如何使用cURL获得请求和响应时间?
hello,老伙计们,又有半个多月没见了,今天给大家分享一个干货编程小技巧,上至架构师、下至开发者、运维男、QA, 得此利器,事半功倍。
有态度的马甲
2021/12/15
4.9K0
如何在 Ubuntu 18.04 上安装和使用 Curl
欢迎关注,如何使用curl工具来下载一个文件。当你运行 curl 命令时,你得到一个错误提示curl command not found。别担心,这只是简单告诉你curl没有安装在你的 Ubuntu 机器上。
雪梦科技
2020/05/11
7.9K0
如何在 Ubuntu 18.04 上安装和使用 Curl

相似问题

改变实体可访问性

25

如何改变可访问性特征语言?

10

当jquery显示元素时,焦点访问性就会丢失。

11

jQuery focus()未生成虚线轮廓或选择正确-可访问性

10

测试UNC路径的“可访问性”

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档