内存结构
文章平均质量分 73
luckyone906
这个作者很懒,什么都没留下…
展开
-
函数形参和实参的传递机制及内存分配的理解
形参变量是函数进入时在栈上分配的(参数被拷贝到形参变量所在的栈内存上,所以形参改变值只是改变了实际参数的备份并不影响函数外的实际参数;只有传送指针等引用传递的参数才能影响实参变量的值),函数结束后被释放。原创 2024-09-15 09:35:48 · 78 阅读 · 0 评论 -
解决C++开发中的内存碎片问题的几种方式
内存碎片指的是已分配的内存块在使用过程中出现断开的情况,导致可分配的连续内存空间变少,从而影响程序的性能和稳定性。通过使用内存池,可以避免频繁的内存分配和释放,从而减少内存碎片的产生。在C++中,内存碎片是指可用内存空间的分割,它导致即使有足够总量的空闲内存,也可能无法满足较大内存块的分配请求。1.对象池:通过预分配一定数量的对象内存,然后自己管理内存池的分配和释放,可以减少对系统内存的频繁申请和释放。/**************************解释C++中的内存碎片及其影响。原创 2024-08-18 11:13:41 · 470 阅读 · 0 评论 -
c++中在堆上创建数组
i == 10 的时候,数组下标范围是0~9,并没有a[10]这个元素,所以程序会导致越界,其结果是未定义的(不确定的)。堆数组,就是指一次性从堆内存分配连续的多个无名变量(也叫元素),这些变量(元素)的地址前后紧挨在一起。下面的代码创建了10个连续存放的无名整型变量(元素),其中第一个变量的地址是a。为了使用这些连续的无名变量(元素),数组使用下标(索引,中括号)来访问这些元素。注意:a[9]是最后一个元素,因为下标是从0,而不是1开始的。注意看第一个元素的下标是0,第10个元素的下标是9。原创 2024-08-18 11:09:48 · 204 阅读 · 0 评论 -
计算机控制系统之CPU组成及原理(内存寄存器)
而当除数是 16 位时,被除数一定是 32 位的,因为 AX 是 16 位寄存器,自然,放不下 32 位的被除数,所以,在这里还需要使用另一个 16 位寄存器 DX ,其中 DX 存放 32 位的被除数的高 16 位,而 AX 则存放 32 位的被除数的低 16 位,同时,AX 的作用还不仅仅是用来保存被除数的,当除法指令执行完成以后,当然,如果除数是 16 位的话,则 AX 中会保存本次除法操作的商,而 DX 则保存本次除法操作的余数。程序的开始过程和顺序流程是一样的,程序的顺序流程和开始过程相同。原创 2024-05-30 21:37:31 · 1815 阅读 · 0 评论 -
c++ 中return返回值与内存的分配释放详解
c++原创 2023-01-11 22:16:16 · 4427 阅读 · 0 评论 -
c++中值类型数组和引用数组的区别
c++原创 2022-12-28 22:18:38 · 738 阅读 · 1 评论 -
C++中delete 和 delete []的真正区别
c++原创 2022-12-24 14:35:42 · 5407 阅读 · 1 评论 -
c++中返回参数为引用时不能是在栈中分配的(必须在堆中创建这样内存是手动释放,而栈中因为函数结束会自动释放栈中的内存)
c++原创 2022-11-25 15:13:09 · 519 阅读 · 0 评论 -
c++中引用、指针、值的区别与用途详解
c++原创 2022-11-25 14:16:27 · 857 阅读 · 0 评论 -
C++中值传递、指针传递和引用传递的比较详解
c++原创 2022-11-25 14:05:38 · 263 阅读 · 0 评论 -
c++中指针,堆栈内存分配重要概念理解汇总(实例注释)
c++原创 2022-11-20 10:15:10 · 1923 阅读 · 0 评论 -
c++中指针概念及指针变量的大小
c++原创 2022-11-20 09:55:46 · 997 阅读 · 0 评论 -
c++中内存堆栈的创建与回收
c++原创 2022-11-20 09:38:38 · 681 阅读 · 0 评论 -
C++程序内存分配方式概念与区别(堆与栈)
c++原创 2022-11-19 19:45:35 · 348 阅读 · 0 评论 -
C++中函数调用的整个过程内存堆栈分配详解
c++原创 2022-11-18 22:26:37 · 3907 阅读 · 0 评论 -
虚拟内存概念3
c++原创 2022-11-11 19:10:30 · 1192 阅读 · 0 评论 -
C++程序开启大地址(虚拟内存),让32位程序使用4G内存的方法,虚拟内存概念及寻址范围详解
c++原创 2022-11-11 19:04:58 · 5808 阅读 · 1 评论 -
地址总线,字长,内存容量,寻址范围 之间的计算
c++原创 2022-11-11 20:35:15 · 20663 阅读 · 0 评论 -
windows系统内存结构概述(重要概念释疑)
c++原创 2022-11-11 20:35:45 · 2510 阅读 · 0 评论 -
计算机系统中虚拟内存概念解疑(2)
c++原创 2022-11-11 20:36:19 · 274 阅读 · 0 评论 -
计算机操作系统执行可执行程序时,内存分配详解
c++原创 2022-11-10 20:18:32 · 1767 阅读 · 0 评论 -
计算机系统中虚拟内存概念解疑(1)
c++原创 2022-11-11 20:36:01 · 985 阅读 · 0 评论 -
虚拟内存概念解疑
c++原创 2022-11-11 20:36:38 · 223 阅读 · 0 评论 -
应用程序进程,内存,虚拟内存之间的关系详解(1)
c++原创 2022-11-10 20:02:37 · 1142 阅读 · 0 评论 -
C++中运行一个程序的内存分配情况及qt中的内存管理机制
c++原创 2022-11-10 18:57:50 · 2289 阅读 · 0 评论 -
C++中创建二维数组的几种方法
c++原创 2022-09-24 22:16:53 · 3752 阅读 · 0 评论 -
C++中对象的动态建立与释放详解
我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。=============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============复制代码代码如下:#include<iostream>using namespace std;int main(){int *p;//定义一个指向int型变量的指针pp=n..原创 2022-05-15 19:46:36 · 1950 阅读 · 0 评论 -
C++ 怎么取整形数组的长度
本文主要讨论两个小点,怎样获取主函数中整形数组的长度;自定义函数输入参数为整型数组,怎么得到该数组长度。【正文】很早就知道C++ 中,因为栈的回收机制,函数的返回值不可以是数组。但是,能不能输入参数包含数组呢?答案是肯定的,以指针形式传入即可。那么,问题再进一步,如果我想在函数中对数组进行遍历,可不可以呢?答案还是肯定的。函数中接收数组的是一个数组指针,也就是把数组的函数名传进去,数组的地址被函数接受,那我们怎么知道数组的长度呢?答案还是肯定的,我们可以用strlen函数啊。但原创 2022-05-15 19:44:27 · 3204 阅读 · 0 评论 -
C++中对象创建与释放
创建对象有以下四种形式:#include <iostream> using namespace std; class A{ private: int i; public: A(){ cout<<"调用没有参数的构造函数"<<endl; } A(int a):i(a){ cout<<"调用有一个参数的构造函数"<<endl; } ~A(){cout<<"成员变量为:"<<i<<"原创 2022-05-15 19:41:22 · 3792 阅读 · 0 评论 -
C++中数组初始化方法
定义:int *pia = new int[10]; // array of 10 uninitialized ints此new表达式分配了一个含有 10 个int型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针pia。在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。注意:C++使用new和delete在堆(自由存储区)上分配和释放动态数组。动态数组初始化:1. 元素只能初始化为元素类型的默认值,而不能像数组变量一...转载 2022-04-25 20:46:35 · 52569 阅读 · 1 评论 -
Qt中跨线程下信号和槽的使用方法
connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。Qt::DirectConnection:槽函数会在信号发送的时候直接被调用,槽函数运原创 2022-04-25 21:24:40 · 4311 阅读 · 0 评论 -
C++内存空间管理
1.C++内存机制1.栈(Stack),函数中的局部变量,由编译器负责分配释放,函数结束,变量释放。2.堆(Heap),通过new 申请的内存,由delete或delete[]释放3.自由存储区(Free Storage),由程序员用malloc,calloc/realloc分配,free进行释放,忘记free,会导致内存泄漏,程序结束时,该区域内存由OS回收4.全局区/静态区(Global Static Area),全局变量和静态变量存储区。程序编译完成后,该区域便存在,在C++中,由于全原创 2022-04-25 21:16:27 · 6964 阅读 · 0 评论 -
类对象的内存和堆空间的内存及初始化详解
对象的内存对象的内存可以存在于 3 种地方:全局区(数据段):全局变量 栈空间:函数里面的局部变量 堆空间:动态申请内存(malloc、new等)/******************************************************文章目录前言malloc/freenew/delete申请堆空间在什么情况下会失败malloc申请堆空间时堆空间的初始化利用memset初始化new申请堆空间时堆空间的初始化前言什么情况下需要堆空间?为了在程序运.原创 2022-04-25 21:07:27 · 2793 阅读 · 0 评论 -
C#中4种深拷贝方法实例
1:利用反射实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static T DeepCopy<T>(T obj) { //如果是字符串或值类型则直接返回 if (obj is string || obj.GetType().IsValueType) return obj; ...原创 2022-03-05 16:38:46 · 1627 阅读 · 0 评论 -
c++中类创建对象的两种方式
class A{};1.A a;2.A *a =new A();第一种方式对象数据存在栈中,是局部变量;第二种方式方式申请了动态内存,即对象数据在堆区。原创 2022-02-05 21:19:24 · 1766 阅读 · 0 评论 -
C++中的野指针问题
文章目录1 C和C++中的野指针问题1.1 野指针的概念1.2 野指针的由来1.3 杜绝野指针的基本原则2 C和C++中的常见内存错误2.1 常见内存错误2.2 内存操作的基本规则1 C和C++中的野指针问题1.1 野指针的概念野指针的概念:指针变量中的值是非法的内存地址,进而形成野指针。野指针不是NULL指针,是指向不可用内存地址的指针。NULL指针并无危害,很好判断,也很好调试。C语言中无法判断一个指针所保存的地址是否合法。1.2 野指针的由来如下情况可能导致野指针的出原创 2021-12-30 20:41:49 · 4227 阅读 · 1 评论 -
句柄的概念详解
1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。程序运行到某时刻的内存快照 程序往后运行到另一时刻时的内存快照Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存,进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。两次装入的地址绝大多数情况下是不一样的。也就是说,同一对象...原创 2021-12-13 19:48:00 · 17949 阅读 · 1 评论 -
多线程中堆和栈区别的深入解析
很多现代操作系统中,一个进程的(虚)地址空间大小为4G,分为系统空间和用户空间两部分,系统空间为所有进程共享,而用户空间是独立的,一般WINDOWS进程的用户空间为2G。 一个进程中的所有线程共享该进程的地址空间,但它们有各自独立的(私有的)栈(stack),Windows线程的缺省堆栈大小为1M。堆(heap)的分配与栈有所不同,一般是一个进程有一个C运行时堆,这个堆为本进程中所有线程共享,Windows进程还有所谓进程默认堆,用户也可以创建自己的堆。堆: 是大家共有的空间,分全局堆和局部堆。全.原创 2021-12-02 19:34:55 · 1508 阅读 · 0 评论 -
c++中多线程传递参数原理分析
线程可以共享进程的内存空间,线程拥有自己独立内存。 关于参数的传递,std::thread的构造函数只会单纯的复制传入的变量,特别需要注意的是传递引用时,传入的是值的副本,也就是说子线程中的修改影响不了主线程中的值。值传递 主线程中的值,被拷贝一份传到了子线程中。 1 #include <iostream> 2 #include <thread> 3 4 using namespace std; 5 6 void test(int ti, in原创 2021-12-02 19:26:16 · 1211 阅读 · 0 评论 -
C语言中指针动态内存的申请和释放
什么是动态内存的申请和释放?当程序运行到需要一个动态变量时,需要向系统的堆中申请一块内存,用来存储这块变量,这就是内存的申请。当程序不需要这个变量时,就需要把申请的这块内存释放掉,这就是内存的释放。往往内存的申请和释放是一起使用的,只要有内存的申请,就要有内存的释放,避免出现内存泄漏。C语言指针的申请:(1).在C语言中使用malloc函数申请内存,函数原形:void* malloc(size_t size);参数size代表申请的内存的字节数,参数size_t代表指针的...原创 2020-08-20 21:10:28 · 20716 阅读 · 0 评论