C++常量区的量是一定会把相同的量合并?

问题描述

C++常量区的量是一定会把相同的量合并?

指针定义同时赋个字符串,这个字符串应该是无法修改的吧。有人说相当于有个常量字符数组存放字符串,再用指针指向该数组。
某处笔试题

#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
    char str1[] = "abc";
    char str2[] = "abc";
    const char str3[] = "abc";
    const char str4[] = "abc";
    char *str5 = "abc";
    char *str6 = "abc";
    const char *str7 = "abc";
    const char *str8 = "abc";

    cout<<(str1==str2)<<endl;
    cout<<(str3==str4)<<endl;
    cout<<(str5==str6)<<endl;
    cout<<(str7==str8)<<endl;

    system("pause");
    return 0;
}

环境VS2010,结果0011
那么为什么2个指针指向的字符串位置都一样?被合并了吗?
又为什么2个const数组,str3 str4的地址不一样?

解决方案

会有可能优化 编译器发现是相同常量就用同一个地址

解决方案二:

2个const数组,str3 str4的地址不一样有可能优化 编译器发现是相同常量就用同一个地址

时间: 2024-11-08 19:52:24

C++常量区的量是一定会把相同的量合并?的相关文章

oracle-数据库优化,现在由于数据量过大 而且要两个表合并来搜,怎么优化么?

问题描述 数据库优化,现在由于数据量过大 而且要两个表合并来搜,怎么优化么? 由于我程序分了运行表和历史表,但查询数据呢却需要两个表合并来搜,然后按时间排序,然后才做到网页分页,现在历史表数据量4亿,运行表数据量40W.主要是单一字段查询.应该怎么优化呢? 解决方案 可以选择用视图将两个表的内容放到一个视图里,用索引,拆表都是有一定的作用的. 解决方案二: 恩恩,可以采用楼上的做法 解决方案三: 楼上讲的很对,建立视图把两个表需要的数据放进去,通过索引查询,效率会大大提升.下面是视图的用法:ht

云HBase全面支持金融云可用区-支持实时安全风控\金融时序\大数据量存储及高并发访问

前言 HBase已经全面支持金融云的业务,包括华东1.华东2.华南区域.HBase是一个通用的数据库,在金融云场景下有较多的需求,本文主要分析hbase解决哪些金融场景的需求 金融云实时风控 在安全风控的场景下,我们往往需求存储大量的结构化数据,主要因为越多的数据,画像风控越精准,阿里蚂蚁金融实时风控流程图如下: 1.数据源会产生在各个地方,以事件为中心,事件有很多的属性,比如:人物.行为.环境.时间 等,会高并发的入库操作. 2.离线分析,我们往往会对历史数据进行较高的并发分析,分析完成后.要

C/C++中的const--常量指针与指针常量

问题解析 常量指针 常量指针是指向常量的指针,指针指向的内存地址的内容是不可修改的. 即指针指向了一个常量,但是指针本身是一个变量 定义const int *p=&a; 这条语句告诉编译器,*p是常量,不能将*p作为左值进行操作.但这里的指针p还是一个变量,它的内容存放常量的地址,所以先声明常量指针再初始化是允许的,指针也是允许修改的 示例 int a = 0,b = 1; const int *p; // 声明常量指针p p=&a; // p指向a p=&b; // 修改指针的值

Effective C#原则2:为你的常量选择readonly而不是const

对于常量,C#里有两个不同的版本:运行时常量和编译时常量. 因为 他们有不同的表现行为,所以当你使用不当时,将会损伤程序性能或者出现错误 . 两害相权取其轻,当我们不得不选择一个的时候,我们宁可选择一个 运行慢一点但正确的那一个,而不是运行快一点但有错误的那个.基于这个理由 ,你应该选择运行时常量而不是编译时常量(译注:这里隐藏的说明了编译时常 量效率更高,但可能会有错误). 编译时常量更快更直接,但在可维护性 上远不及运行时常量.保留编译时常量是为了满足那些对性能要求克刻,且随着 程序运行时间

Swift基础语法(常量变量、数据类型、元组、可选、断言)

本文来自Swift中文开发组,感谢翻译者的分享. 本文将分几部分对Swift对ios的语法做讲解.本文为第一节,主要讲解基础语法. 常量和变量 常量和变量把一个名字(比如maximumNumberOfLoginAttempts或者welcomeMessage)和一个指定类型的值(比如数字10或者字符串"Hello")关联起来.常量的值一旦设定就不能改变,而变量的值可以随意更改. 声明常量和变量 常量和变量必须在使用前声明,用let来声明常量,用var来声明变量.下面的例子展示了如何用常

探讨:程序在内存中的分配(常量,局部变量,全局变量,程序代码)问题_C 语言

一. 在c中分为这几个存储区1.栈 - 由编译器自动分配释放2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.- 程序结束释放4.另外还有一个专门放常量的地方.- 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上.在所有函数体外定义的是

c语言-C语言:字符串常量和浮点常量的区别?

问题描述 C语言:字符串常量和浮点常量的区别? C语言:字符串常量和浮点常量的区别是什么?还有一般的整型?他们是不是存储在一个区域 解决方案 希望可以尽快得到解答 解决方案二: 常量都放在常量池中,可以是任何类型 解决方案三: 这个很简单,你定义一些常量,输出它们的指针,你会很容易发现,它们的确是在差不多的地方的.(相比堆栈和堆的地址) 解决方案四: 应该是存储在同一个区域 解决方案五: 区别在于他们译码方式不同.在同一个区存储区域内. 解决方案六: 1) 形式上: ...字符常量是单引号引起的

数据量过大时数据库操作的处理

数据|数据库 随着"金盾工程"建设的逐步深入和公安信息化的高速发展,公安计算机应用系统被广泛应用在各警种.各部门.与此同时,应用系统体系的核心.系统数据的存放地――数据库也随着实际应用而急剧膨胀,一些大规模的系统,如人口系统的数据甚至超过了1000万条,可谓海量.那么,如何实现快速地从这些超大容量的数据库中提取数据(查询).分析.统计以及提取数据后进行数据分页已成为各地系统管理员和数据库管理员亟待解决的难题. 在以下的文章中,我将以"办公自动化"系统为例,探讨如何在

Swift语言指南(五) Swift语言的数字字面量和数字类型转换

数字字面量 整数字面量写法如下: · 十进制数,无前缀 · 二进制数,以 0b 为前缀 · 八进制数,以 0o 为前缀 · 十六进制数,以 0x 为前缀 下面所有整数字面量值为十进制的 17 : 1 let decimalInteger = 17 2 let binaryInteger = 0b10001       // 17 二进制标识 3 let octalInteger = 0o21           // 17 八进制标识 4 let hexadecimalInteger = 0x1