首页 > 系统相关 >c++ string类的字符在内存的储存位置

c++ string类的字符在内存的储存位置

时间:2023-04-06 10:46:04浏览次数:44  
标签:b% string temp int c++ 内存 printf include

1. 数据<=16字节,在当前栈区

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    string temp = "123456789012345";    //注意长度
    int *a = (int *)malloc(sizeof(int));
    int b = 0;
    for(auto &c:temp)
    {
        printf("c%p\n", &c);
    }
    printf("a%p\n", a);
    printf("b%p\n", &b);
}
/*
c0x7ffdb1c5b060     //地址与&b相近,位于栈区
c0x7ffdb1c5b061
c0x7ffdb1c5b062
c0x7ffdb1c5b063
c0x7ffdb1c5b064
c0x7ffdb1c5b065
c0x7ffdb1c5b066
c0x7ffdb1c5b067
c0x7ffdb1c5b068
c0x7ffdb1c5b069
c0x7ffdb1c5b06a
c0x7ffdb1c5b06b
c0x7ffdb1c5b06c
c0x7ffdb1c5b06d
c0x7ffdb1c5b06e
a0x12c3c20
b0x7ffdb1c5b01c
*/

 

2. 数据>16字节,在堆区

 

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main()
{
    string temp = "1234567890123456";    //注意长度
    int *a = (int *)malloc(sizeof(int));
    int b = 0;
    for(auto &c:temp)
    {
        printf("c%p\n", &c);
    }
    printf("a%p\n", a);
    printf("b%p\n", &b);
}
/*
c0xe86c20       //地址与a相近,位于堆区
c0xe86c21
c0xe86c22
c0xe86c23
c0xe86c24
c0xe86c25
c0xe86c26
c0xe86c27
c0xe86c28
c0xe86c29
c0xe86c2a
c0xe86c2b
c0xe86c2c
c0xe86c2d
c0xe86c2e
c0xe86c2f
a0xe86c40
b0x7ffe59e72fcc
*/

  

 

标签:b%,string,temp,int,c++,内存,printf,include
From: https://www.cnblogs.com/mathyk/p/17291890.html

相关文章

  • 初学C++第一天
    C语言简介:  BCPL->NewB->C->UNIX->Minix->Linux->gcc  C语言诞生于1971~1973年,美国贝尔实验室,肯.汤普逊和丹尼斯.里奇  C语言是专门为了编写操作系统而诞生的语言,天生适合对硬件编程,以运行速度快而著称,而且C语言非常适合编写数据结构和算法  因为C语言出现......
  • 华为OD机试 内存池
    本期题目:内存池题目有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源。用户橡皮擦会进行一系列内存申请,需要按需分配内存池中的资源,返回申请结果成功失败列表。分配规则如下:分配的内存要大于等于内存的申请量存在满足需求的内存就必须分配优先分配粒度......
  • 【c&c++】#ifdef __cplusplus extern “C”的作用详解
    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern"C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因......
  • 【c&c++】C语言 char*和char[]用法
    char[]定义的是一个字符数组,注意强调是数组。char*定义的是一个字符串指针,注意强调是指针。char*s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以:当char*s=“hello”;后,不能使用s[0]=‘a’;语句进行赋值。这是将提示内存不能为"written"......
  • C/C++ 占位符总结
    ......
  • C#调用C++ 平台调用P/Invoke 字符串【三】
    Gitp-invoke源码地址 C#调用C++平台调用P/Invoke调用约定【一】C#调用C++平台调用P/Invoke函数指针/回调函数【二】C#调用C++平台调用P/Invoke字符串【三】C#调用C++平台调用P/Invoke错误码LastError【四】C#调用C++平台调用P/Invoke结构体--输入输出参数、返回值、返......
  • C#调用C++ 平台调用P/Invoke 函数指针/回调函数【二】
    Gitp-invoke源码地址 C#调用C++平台调用P/Invoke调用约定【一】C#调用C++平台调用P/Invoke函数指针/回调函数【二】C#调用C++平台调用P/Invoke字符串【三】C#调用C++平台调用P/Invoke错误码LastError【四】C#调用C++平台调用P/Invoke结构体--输入输出参数、返回值、返......
  • C++/CLI 托管C++的数组介绍【4】
    Git源码地址 C++/CLI托管C++的托管与非托管字符串的相互转换【1】C++/CLI托管C++的数据类型介绍【2】C++/CLI托管C++的基本数据类型及函数【3】C++/CLI托管C++的数组介绍【4】C++/CLI托管C++之字符串封装【5】C++/CLI托管C++之enum枚举封装【6】C++/CLI托管C++之类、属性......
  • #FREERTOS的和heap_4内存分配算法
    FreeRTOS的heap_4内存管理算法具有内存碎片合并的功能,可以有效防止内存碎片产生,使用Firstfit算法,在实现上与C标准库的malloc类似,但是效率更高且能进行碎片合并回收。以下是个人对源码的解析,有空再补充详细。一、初始化staticvoidprvHeapInit(void){BlockLink_t*pxF......
  • C++逆向分析——this指针
    this指针概述C++是对C的拓展,C原有的语法C++都支持,并在此基础上拓展了一些语法:封装、继承、多态、模板等等。C++拓展新的语法是为了让使用更加方便、高效,这样就需要编译器多做了很多事情,接下来我们就需要一一学习这些概念。封装之前我们学习过结构体这个概念,那么结构体可以......