iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c/c++内存分配大小实例讲解
  • 294
分享到

c/c++内存分配大小实例讲解

2024-04-02 19:04:59 294人浏览 泡泡鱼
摘要

测试平台:linux 32位系统 用sizeof()运算符计算分配空间大小。单位:字节 1. 数组名与变量名的区别 int main() { char q[] = "he

测试平台:linux 32位系统

用sizeof()运算符计算分配空间大小。单位:字节

1. 数组名与变量名的区别


int main()
{
    char q[] = "hello";
    cout << "q:" << sizeof(q) << endl;
    char *MQ = q;
    cout << "mq:" << sizeof(mq) << endl;

    const char *p = "hello";
    cout << "p:" << sizeof(p) << endl;
}

结果

q:6
mq:4
p:4

分析

q是数组名,申请内存是编译器记住了,但是赋值给mq后,mq和p一样是一个普通的指针了,大小为4.

总之:C/C++没有办法知道指针所指的内存容量,除非在申请时记住它。

2. 类的内存分配

2.1 空类


#include <iOStream>
using namespace std;


class A
{
};

int main()
{
    A a;
    cout << sizeof(a) << endl;
}

结果

1

分析

所谓类的实例化就是在内存中分配一块地址(空类同样可以被实例化),每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址.因为如果空类不隐含加一个字节的话,则空类无所谓实例化了(因为类的实例化就是在内存中分配一块地址。

2.2 类只有成员变量


#include <iostream>
using namespace std;


class A
{
    public:
        int val;
};

int main()
{
    A a;
    cout << sizeof(a) << endl;
}

结果

4

解释

这个4是int类型类的成员变量所占字节数

2.2 类含有成员函数


#include <iostream>
using namespace std;


class A
{
    public:
        A(int value) : val(value) {}
        int val;
};

int main()
{
    A a(3);
    cout << sizeof(a) << endl;
}

结果

4

分析

这个4是int类型类的成员变量所占字节数。即成员函数没有占空间。原因是这样的:成员函数不属于类(或类的对象),所有的成员函数和全局函数都在代码段,在调用成员函数时,会隐式的通过this指针过去调用。

3.3 类中含有静态成员


#include <iostream>
using namespace std;


class A
{
    public:
        A(int value) : val(value) {}
        int val;
        static int sta_val;
};
int A::sta_val = 3;

int main()
{
    A a(3);
    cout << sizeof(a) << endl;
}

结果

4

分析

这个4仍然是int类型类的成员变量所占字节数。static变量存放于静态区,并不和普通成员变量(存于栈)放在一起。

3.4 类中含有virtural函数


#include <iostream>
using namespace std;


class A
{
    public:
        int val;
        virtual void fuc() { cout << "hello" << endl; } 
};


int main()
{
    A a;
    cout << sizeof(a) << endl;
}

结果

8

分析

virtual 会增加4个字节大小的空间。原因:增加一个virtual ,会增加一个虚函数表指针(即使有多个虚函数,也仅有一个虚函数表),例证


#include <iostream>
using namespace std;


class A
{
    public:
        int val;
        virtual void fuc() { cout << "hello" << endl; } 
        virtual void fuc2() { cout << "hello" << endl; } 
};


int main()
{
    A a;
    cout << sizeof(a) << endl;
}

结果

8

3.5 子类空间分配

例子1


#include <iostream>
using namespace std;


class A
{
    public:
        int val;
};

class B : public A
{
    int valb;
};


int main()
{
    B b;
    cout << sizeof(b) << endl;
}

结果

8

例子2


#include <iostream>
using namespace std;


class A
{
    public:
        int val;
        virtual void fuc() {}
};

class B : public A
{
    int valb;
};


int main()
{
    B b;
    cout << sizeof(b) << endl;
}

结果

Bb

分析

4 + 4 + 4(虚函数表指针)

到此这篇关于c/c++内存分配大小实例讲解的文章就介绍到这了,更多相关c/c++内存分配大小内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c/c++内存分配大小实例讲解

本文链接: https://www.lsjlt.com/news/157286.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c/c++内存分配大小实例讲解
    测试平台:linux 32位系统 用sizeof()运算符计算分配空间大小。单位:字节 1. 数组名与变量名的区别 int main() { char q[] = "he...
    99+
    2022-11-12
  • C语言编程C++动态内存分配示例讲解
    目录动态内存管理为什么存在动态内存分配动态内存函数的介绍malloc申请空间和free释放空间有借有还 free释放内存calloc申请内存realloc调整动态内存的大小reall...
    99+
    2022-11-12
  • C语言动态内存分配图文讲解
    目录思维导图1.为什么存在动态内存分配2.动态内存函数的介绍2.1 malloc2.2 free2.3 calloc2.4 realloc3.常见的动态内存错误思维导图 1.为什么...
    99+
    2023-01-17
    C语言动态内存分配 C语言动态内存分配函数
  • C++程序的五大内存分区实例详解
    目录1、栈内存区1.1、调用函数时通过栈来传递函数的参数值       1.2、线程占用的栈内存是有上限的2、堆内存区3、全局/静态内存区4、...
    99+
    2022-11-12
  • C语言动态内存的分配实例详解
    目录前言动态内存分配的定义动态内存的优势<1>  可以控制内存的大小<2> 可以多次利用这部分空间<3>不占用栈区的内存malloc c...
    99+
    2022-11-13
  • C++超详细讲解内存空间分配与this指针
    目录成员属性和函数的存储空对象成员属性的存储成员函数的存储this指针的概念解决名称冲突返回对象指针*this总结成员属性和函数的存储 在C++中成员变量和成员函数是分开存储的; 空...
    99+
    2022-11-13
  • C++中类的大小实例分析
    这篇“C++中类的大小实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++中类的大小实例分析”文章吧。一、普通类的大...
    99+
    2023-06-29
  • C语言中的动态内存分配实例分析
    本篇内容主要讲解“C语言中的动态内存分配实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中的动态内存分配实例分析”吧!什么是动态内存分配我们目前已经知道的内存开辟的方式有:int&n...
    99+
    2023-07-02
  • C++图文并茂分析讲解内存管理
    目录1.了解一些基本的内存段(图演示)验证栈是向下生长的验证堆一般是向上生长的(不一定)巩固内存管理知识点答案2.c++申请动态内存的新玩儿法new,delete回顾c语言动态内存管...
    99+
    2022-11-13
  • C++中怎么实现内存分配
    这篇文章给大家介绍C++中怎么实现内存分配,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C++内存分配方式总共有三种:(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如...
    99+
    2023-06-17
  • C语言深入讲解动态内存分配函数的使用
    目录一、malloc二、free(用于释放动态开辟的空间)三、calloc四、realloc五、常见的动态内存分配错误六、柔性数组局部变量和函数的形参向栈区申请空间 全局变量和sta...
    99+
    2022-11-13
  • 带你了解C++的动态内存分配
    目录new与delete运算符动态分配数组动态分配字符串总结new与delete运算符 数组在定义时就规定了其长度,这使得它的内存空间也固定了下来,这称为静态内存分配。 内存申请大了...
    99+
    2022-11-12
  • 详解C语言动态内存的分配
    目录C 程序中,不同数据在内存中分配说明内存动态分配的相关函数应用实例动态分配内存的基本原则总结C 程序中,不同数据在内存中分配说明 1)全局变量——内存中的...
    99+
    2022-11-12
  • C语言的动态内存分配及动态内存分配函数详解
    目录mallocmalloc的使用:freecalloccalloc的使用:reallocrealloc的使用改进:realloc的另一种用法:常见的动态内存错误对空指针的解引用操作...
    99+
    2022-11-13
  • C语言内存分布与heap空间分别详细讲解
    目录内存分布变量内存4区模型开辟释放 heap 空间使用 heap 空间二级指针对应的 heap空间内存分布 程序没有加载到内存前,可执行程序内部已经分好3段信息,分别为代码区(te...
    99+
    2022-11-13
    C语言内存分布与heap空间 C语言内存分布 C语言heap空间
  • C语言的变量类型及内存大小详解
    类型 存储大小 值范围 c输入输出格式 ...
    99+
    2022-11-12
  • C++ 操作系统内存分配算法的实现详解
    目录一、实验目的二、实验内容三、实验要求四、代码实现 五、测试样例一、实验目的 通过本实验帮助学生理解在动态分区管理方式下应怎样实现主存空间的分配和回收。 二、实验内容 在动态分区管...
    99+
    2022-11-12
  • C语言内存操作函数使用示例梳理讲解
    目录一、memcpy()函数原型参数说明模拟算法使用示例二、memmove()函数原型参数说明模拟算法使用示例三、memset()函数原型参数说明使用说明使用示例四、memcmp()...
    99+
    2022-11-13
  • C语言如何实现动态内存分配
    今天小编给大家分享一下C语言如何实现动态内存分配的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。C语言动态内存分配的详解1.为...
    99+
    2023-06-16
  • C++使用动态内存分配的原因解说
    上节我们讲了C++程序的内存分布。C++程序的内存分布 本节来介绍为什么要进行内存分配。 按需分配,根据需要分配内存,不浪费。 内存拷贝函数void* memcpy(void* de...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作