数据结构与算法
文章平均质量分 79
luckyone906
这个作者很懒,什么都没留下…
展开
-
c及c++基础概念:寄存器、内存、堆栈之间的关系和原理详解
寄存器寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,包括通用寄存器、专用寄存器和控制寄存器。其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。内存原创 2024-05-30 21:23:46 · 2673 阅读 · 0 评论 -
C++中创建二维数组的几种方法
c++原创 2022-09-24 22:16:53 · 3756 阅读 · 0 评论 -
句柄的概念详解
1.这里将句柄所能标识的所有东西(如窗口、文件、画笔等)统称为“对象”。2.图中一个小横框表示一定大小的内存区域,并不代表一个字节,如标有0X00000AC6的横框表示4个字节。程序运行到某时刻的内存快照 程序往后运行到另一时刻时的内存快照Windows是一个以虚拟内存为基础的操作系统,很多时候,进程的代码和数据并不全部装入内存,进程的某一段装入内存后,还可能被换出到外存,当再次需要时,再装入内存。两次装入的地址绝大多数情况下是不一样的。也就是说,同一对象...原创 2021-12-13 19:48:00 · 17953 阅读 · 1 评论 -
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/C++编译程序占用内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量存储是放在一块,初始化全局变量和静态变量在一块区域, 未初始化全局变量和未初始化静态变量在相邻另一原创 2020-12-28 21:33:55 · 3467 阅读 · 0 评论 -
C语言中指针动态内存的申请和释放
什么是动态内存的申请和释放?当程序运行到需要一个动态变量时,需要向系统的堆中申请一块内存,用来存储这块变量,这就是内存的申请。当程序不需要这个变量时,就需要把申请的这块内存释放掉,这就是内存的释放。往往内存的申请和释放是一起使用的,只要有内存的申请,就要有内存的释放,避免出现内存泄漏。C语言指针的申请:(1).在C语言中使用malloc函数申请内存,函数原形:void* malloc(size_t size);参数size代表申请的内存的字节数,参数size_t代表指针的...原创 2020-08-20 21:10:28 · 20716 阅读 · 0 评论 -
8086汇编与c++编译器就内存方面的感想
8086汇编中可以手动分配栈内存,没有堆内存的概念,而c++编译器中栈是系统分配的,堆是手动分配的。原创 2020-02-22 14:44:38 · 199 阅读 · 0 评论 -
c语言之 malloc函数详解 在堆中动态分配内存malloc和new的区别
一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针N...原创 2020-02-22 14:39:15 · 2167 阅读 · 0 评论 -
C#数组按值和按引用传递数组区别
C#中,存储数组之类对象的变量并不是实际存储对象本身,而是存储对象的引用。按值传递数组时,程序将变量传递给方法时,被调用方法接受变量的一个副本,因此在被调用时试图修改数据变量的值时,并不会影响变量的原始值;而按引用传递数组时,被调用方法接受的是引用的一个副本,因此在被调用时修改数据变量时,会改变变量的原始值。下面一个例子说明如下:using System;using System.Co...原创 2019-11-20 16:10:26 · 2309 阅读 · 0 评论 -
C++中关于[]静态数组和new分配的动态数组的区别分析
一、静态数据及动态数组的创建 静态数据: int a[10]; int a[]={1,2,3}; 数组的长度必须为常量。 动态数组: int len; int *a=new int [len]; delete a;...转载 2019-07-21 09:58:07 · 255 阅读 · 0 评论 -
一个简单的内存分配例子
来看一个网上很流行的经典例子:main.cppint a = 0; 全局初始化区char *p1; 全局未初始化区main(){int b; 栈char s[] = "abc"; 栈char *p2; 栈char *p3 = "123456"; 123456\0在常量区,p3在栈上。static int c =0; 全局(静态)初始化区p1 = (char *)malloc(...转载 2019-07-21 09:42:17 · 147 阅读 · 0 评论 -
c#指针的使用例程
unsafe { double value = 888888; byte[] v1 = BitConverter.GetBytes(value); byte[] v2 = new byte[v1.Length]; double* pv = &am...原创 2019-03-06 11:19:46 · 221 阅读 · 0 评论 -
C#中使用指针转换数据类型[C#/unsafe]
今日因为一个同事说起,在原来的旧系统中使用指针做数据转换很方便,比如要把浮点数转化为数组,也或者是字符串的相互转换;当然,大家都知道c#中实现指针只需要写入unsafe,编译选项把“允许不安全代码”开启即可;他提出这种需求也不无道理,因为要和工控的下位机通讯,自行转换还是比较麻烦,使用指针的话将变的容易许多;具体的实现我编写了一个类,详细的作法见代码;实现了int/float/double转byt...转载 2019-03-06 10:15:59 · 1644 阅读 · 0 评论 -
Marshal在C#中的应用(void *指针到IntPtr的转化)
C#调用C语言的API时一般把void *指针转换成IntPtr,但这经常远远不够的。在C语言中void *是个万金油,尤其是一些老的c语言程序,所有的参数就一个void*指针,里面包罗万象,然后在程序中来一个switch,甚至多个switch来处理不同的参数。最近笔者就碰到了这个问题,不得不来研究一下怎么把void *指针转换成IntPtr。1.void *指针到IntPtr的简单转化。...转载 2019-03-06 10:11:21 · 5284 阅读 · 0 评论 -
指针强制转换问题
void ff(void* abc)//任意类型数据指针(指针即内存地址) { int* z = (int*)abc;//强制转换成int* 指针变量 int zz = *z;//获取内存中的值 }...原创 2019-02-26 11:56:47 · 492 阅读 · 0 评论 -
常用方法和属性列表
BitConvert.islittle 判断大小端Array.reverse 反排列数组原创 2016-12-22 12:05:51 · 359 阅读 · 0 评论 -
数组内存分配概念
在这里解答一下:int arr[4];&arr[1] = arr[0] + sizeof(int) ;静态分配, 即普通数组, 由于在栈中分配, 而栈的生成方向是自高地址向低地址生成。 所以有:&arr[0] > &arr[1] ....动态分配的数组。针对动态数组。 动态数组的内存分配在heap中。 而heap 的生成是由低地址向高地址生成。 所以有:&arr[0转载 2018-01-02 12:08:27 · 3263 阅读 · 1 评论 -
静态数组和动态数组 内存分布
数组是程序设计中是一个非常重要的概念。数组是一个用于收集大量类似数据的容器,以及其每一个元素能被相同处理过程迭代来处理的一个抽象体。创建数组一般有三种方式:全局/静态范围的数组,局部变量数组,申请堆空间来创建数组。其中,全局/静态范围的数组,以及局部变量属于静态数组。而申请堆空间来创建数组的属于动态数组。a[7]与p1_a[7]是一样的么?静态两维数组的排列顺序转载 2018-01-02 12:18:25 · 4552 阅读 · 0 评论 -
C语言 内存分配 地址 指针 数组 参数 解析
指针简介 : 指针式保存变量地址的变量;-- 增加阅读难度 : 指针 和 goto 语句会增加程序的理解难度, 容易出现错误;-- ANSI C : American National Standards Institute 美国国家标准学会, 即标准C;-- 通用指针类型 : ANSI C中使用 void* 作为通用指针类型, 即指向void的指针, void 是空类型,void转载 2018-01-02 12:22:54 · 374 阅读 · 0 评论 -
C++数组与指针概念
指向数组元素的指针一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。 int a[10]; //定义一个整型数组a,它有10个元素 int *p; //定义一个基类型为整型的指针变量p p=&a[0];转载 2018-01-02 13:34:09 · 694 阅读 · 0 评论 -
C语言中指针的初始化和赋值
1、指针的初始化指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。例如:int a = 25;int *ptr = &a;int b[10];int *point = b; int *p = &b[0];转载 2018-01-03 14:58:44 · 16248 阅读 · 3 评论 -
虚拟内存解疑
虚拟内存别称虚拟存储器(Virtual Memory)。电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很多,则会导致内存消耗殆尽。为解决该问题,Windows中运用了虚拟内存[2] 技术,即匀出一部分硬盘空间来充当内存使用。当内存耗尽时,电脑就会自动调用硬盘来充当内存,以缓解内存的紧张。若计算机运行程序或操作所需的随机存储器(RAM)不足时,则 Windows转载 2018-03-24 14:56:45 · 471 阅读 · 0 评论 -
windows内存结构概述
13.1 Windows的虚拟地址空间安排13.1.1虚拟地址空间的分区(即虚拟地址空间布局) 进程的地址空间划分分区x86 32位Windows3GB用户模式下的x8632位WindowsX64 64位WindowsIA-64 64位Windows空指针赋值区转载 2018-03-24 15:03:22 · 4000 阅读 · 0 评论 -
closehandle()函数
引用自《百度百科》,用于解决今天遇到的close handle 后什么时候释放资源问题: 方法名称:CloseHandle位置:Kernel32.dllBOOL CloseHandle(HANDLE hObject);参数hObject :代表一个已打开对象handle。返回值TRUE:执行成功;FALSE:执行失败,可以调用GetLastErro...转载 2019-01-18 18:59:01 · 2286 阅读 · 0 评论 -
c++中字符数组内存和指针问题示例解答
char* id = "123456"; char* c= ":SN="; unsigned char buffer[20]; int j = 0; for (int i = 0;i < strlen(c);i++) { buffer[j] = c[i]; j++; } for (int i = 0;...原创 2019-01-28 15:58:40 · 306 阅读 · 0 评论 -
c++内存测试
void MemoryTest()//内存测试 {//指针嵌套 char rr;//栈中分配内存(系统自动分配释放) int ee = (int)&rr;//将rr的内存地址转换成整型数 char* yy = &rr;//定义一个字符型指针yy,将rr内存地址赋予yy int* zz = (int*)&yy;//存放指针的指针变...原创 2019-02-15 14:27:21 · 728 阅读 · 0 评论 -
C#的数据类型总结
C#的数据类型可以分为3类:数值类型,引用类型,指针类型.指针类型仅在不安全代码中使用.一、值类型 值类型包括简单值类型和复合型类型。简单值类型可以再细分为整数类型、字符类型、实数类型和布尔类型;而复合类型则是简单类型的复合,包括结构(struct)类型和枚举(enum)类型。1.整数类型:类型标识符描转载 2016-12-11 10:45:34 · 994 阅读 · 0 评论