一.什么是堆.栈? 程序需要的内存空间分为 heap(堆) 和 stack(栈),heap 是自由存储区, stack 是自动存储区,使用 heap 需要手动申请.手动释放, stack 是自动申请.自动释放,使用 heap 时, 如果只申请不释放, 就会发生"内存泄露",不需要申请和释放空间的元素, 譬如变量.结构(record)等, 是存与 stack(栈),反之如需要 Create 和 Free 的对象.需要 GetMem 和 FreeMem 的指针等, 则是存于 heap(堆)…
动态数组的分配和释放 new和数组 C++语言和标准库提供了一次分配一个对象数组的方法,定义了另一种new表达式语法.我们需要在类型名后跟一对方括号,在其中指明要分配的对象的数目. int* arr = new int[20]; // arr 指向第一个int 方括号中的大小必须是整数,但不必是常量. 可以使用typedef来表示数组类型的别名: typedef int arrT[42]; int* p = new arrT; // 分配一个42个int的数组,p指向第一个int 虽然我们通常称…
一直都有一个疑问,一个进程可以使用多大的内存空间,swap交换空间以及物理内存的大小,ulimit的stack size对进程的内存使用有怎样的限制?今天特亲自动手实验了一次,总结如下: 开辟一片内存空间有2种方式,第一种:int a[]:第二种malloc,那么在linux下,这两种方式可以开辟多大的内存空间呢?下面依次进行实验: 第一种方式:使用malloc申请内存: 这样的方式是在堆区申请的内存,在linux中,其实是在申请的时候基本没有限制,比如32位机器,理论上可以malloc(4G)…
动态内存-动态数组 习题12.23 //连接字符串到动态数组 char *c = new char[20](); char a[] = "hello "; char b[] = "world"; strcopy(c, a); strcopy(c+strlen(a), b); cout<<c<<endl; // 连接string到动态数组 char *c = new char[20](); string a = "hello &quo…
网上有篇文章<Delphi接口编程的两大陷阱>,里面提到接口的生存期管理的问题.但该文章里面提到的两个问题,其实都是对 Delphi 不理解导致的.   先说该篇文章中提到的第一个问题为什么是该文章作者不理解 DELPHI 导致他认为那是不可理解的陷阱.然后俺再来重点解释接口的生命周期管理.   一. 接口 - 对象. 假设有接口定义: IMyTask = interface   procedure SayHello; end; 然后有个类实现了该接口: TMyClass = class(TC…
SQL Server 的内存管理是一个庞大的主题,涉及特别多的概念和技术,例如常见的 Plan Cache.Buffer Pool.Memory Clerks 等.本文仅是管中窥豹,描述常见的内存管理相关概念. 在了解内存管理之前,通过 sys.dm_os_memory_clerks 视图可以查询内存的使用职责(Memory Clerks),也就是内存的消耗者. SELECT [type], SUM(pages_kb) AS total_pages_kb FROM sys.dm_os_memor…
用C语言实现一个动态数组,并对外暴露出对数组的增.删.改.查函数 (可以存储任意类型的元素并实现内存管理) 这里我的编译器就是xcode 分析: 模拟存放 一个 People类 有2个属性 字符串类型:姓名 整型:年龄 array 结构体 应当有 数组长度:length 空间:capacity 存储对象:value(任意类型) 构造一个任意对象类.拥有retainCount属性.为内存计数器 使用一次retainCount+1,当retainCount为0时 释放该对象指向的内存 贴出部分代码…
问题来源 最近在集成spring和mybatis时遇到了很多问题,从网上查了也解决了,但是就是心里有点别扭,想看看到底怎么回事,所以跟了下源码,终于发现了其中的奥妙. 问题分析 首先我们来看看基本的配置. spring的配置: <!-- 数据库配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="…
1,内存管理简单介绍 1,为什么要有内存管理? malloc selloc dealloc```需要回头复习 一般的内存 4s 是512m内存:6 是1024m内存: 当内存过大时,会耗尽内存.出现程序闪退. 2.OC内存管理的范围 : 管理任何继承NSObject的对象,对其他的基本数据类型无效. 3.对象类型是程序运行过程中动态分配的,存储在堆区:内存管理主要是对 堆区中的对象的内存管理. 4.OC内存管理的原理 为了防止内存泄露 对象的引用计数器 : 每个OC对象都有自己的引用计数器,是一…
商品管理的程序,商品信息都存在一个json串里面 1.查询商品信息 #校验商品是否存在 2.新增商品 # #校验商品是否存在 #校验价格是否合法 3.修改商品信息 ##校验商品是否存在 if chice =="1": query_goods() elif choice = ="2": add_goods() goods.json: { "iphonex":{ "num":100, "price":1999.…
一.基本用法 在LeakDiag中选择aaa.exe 然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop 会在c:\leakdiag\Logs下面生成一个log 关键的部分是 <LEAKS ver="1.25.28.2201"> <STACK numallocs="05" size="048" totalsize="0240">&l…
就一个button事件 procedure TForm1.btn7Click(Sender: TObject); Type TMyArr = array of array of array of Integer; {定义一个三维动态数组类型} Pint = ^TMyArr; var PArr: Pint; {动态数组指针变量} i,j,k,ic,jc,kc: Integer; begin Memo1.Lines.Clear; {用作维数的变量} ic := ; jc := ; kc := ; {…
此文章转载于http://www.raysoftware.cn/?p=278&tdsourcetag=s_pcqq_aiomsg的博客 从Delphi支持泛型的第一天起就有了一种新的动态数组类型,泛型化的动态数组–TArray.虽然这个类型比较方便,但是却没有提供更丰富的操作.因为XE4中提供了对数据类型的Helper扩展,例如StringHelper,企图实现一个TArrayHelper但是发现Helper不支持泛型的类型.没办法只好包装了一个record,好处是似乎只要支持泛型的Delphi…
传统的Pascal 语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定数组元素的个数.专业程序员也许知道些许动态数组的实现技术,一般是采用指针,用手工分配并释放所需的内存. Delphi 4中增加了非常简单的动态数组实现方法,实现过程效仿我前面讲过的动态长字符串.与长字符串一样,动态数组的内存动态分配并且引用记数,不过动态数组不支持 copy-on-write 技术.这不是个大问题,因为你可以把变量值设置为nil释放数组内存. 这样你就可以声明一个不指定元素个数的数组,并用Se…
Delphi有三种类型的字符: AnsiChar这是标准的1字节的ANSI字符,程序员都对它比较熟悉. WideChar这是2字节的Unicode字符. Char在目前相当于AnsiChar,但在Delphi 2010 以后版本中相当于WideChar. 记住因为一个字符在长度上并不表示一个字节,所以不能在应用程序中对字符长度进行硬编码, 而应该使用Sizeof()函数.注意Sizeof()标准函数返回类型或实例的字节长度. Delphi有下列几种不同的字符串类型 String: ShortSt…
之前一片文章中我们介绍了OC中的两个关键字@property和@synthesize的使用的使用: http://blog.csdn.net/jiangwei0910410003/article/details/41925967 今天我们来看一下OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题 // // main.m // 26_NSArrayMemeryManager // // Created by jian…
25年后从10个使用Delphi的理由到1个至25个使用Delphi 10.3的理由 25年前发布Delphi 1时,我汇总了使用Delphi的十大理由.这是我精通Delphi原始书的序言中的原始列表: “可以使用许多编程环境,但是Delphi之所以出色,有很多原因.以下是我以相反顺序使用Delphi的十大理由: 10.以前的Borland Pascal和C++编译器 9.第三方组件和工具 8.编辑器,调试器,浏览器和其他工具 7.库源代码的可用性 6.基于表单和面向对象的方法 5.快速编译器…
参考文档:https://github.com/acmesh-official/acme.sh 一个使用纯shell操作的免费SSL证书申请部署工具. 免费的SSL证书由以下CA机构提供: ZeroSSL.com CA(default) Letsencrypt.org CA BuyPass.com CA SSL.com CA Pebble strict Mode Any other RFC8555-compliant CA 安装与初次使用 1.从Git安装 安装时需要指定要创建账号的邮箱,初次运…
一.作用域为类的常量 有些情况下,使符号常量的作用域为类很有用.如,类声明(不是定义)可能使用字面值30来指定数组长度,由于该常量对于所有对象来说都是相同的,因此创建一个由所有对象共享的常量是个不错的主意,也许我们想像下面这样做: class Weather { private: ; //声明一个常量 double temperature[Months]; ... } 要注意的是,我们这是在声明阶段,需要在声明类的时候就有一个字符常量可以供我们使用,但是也正因为我们处于声明阶段,类的声明只是描述…
malloc工作机制: malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表(堆内存).调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节).接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上.调用free函数时,它将用户释放的内存块连接到空闲链上.到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段…
如果想观察JVM进程占用的堆内存,可以通过命令工具jmap或者可视化工具jvisualvm.exe.JVM这些启动参数都拥有默认值,如果想了解JVM的内存分配策略,最好手动设置这些启动参数.再通过JDK提供的工具的统计结果,进行对比,就比较容易理解这些内存分配的理论知识.运行环境是win7 32位操作系统,JDK1.7.0_60版本. 测试代码和JVM启动参数如下: public class Test { public static void main(String[] args) { ; wh…
[送给在路上的程序猿] 对于一个开发人员而言,可以胜任系统中随意一个模块的开发是其核心价值的体现. 对于一个架构师而言,掌握各种语言的优势并能够运用到系统中.由此简化系统的开发,是其架构生涯的第一步. 对于一个开发团队而言,能在短期内开发出用户惬意的软件系统是起核心竞争力的体现. 每个程序猿都不能固步自封,要多接触新的行业,新的技术领域,突破自我. 数组与指针 #include<stdio.h> #include<stdlib.h> void main1() { int a[10]…
传递双重指针申请内存,典型用法 指针参数是如何传递内存的? 如果函数的参数是一个指针,不要指望用该指针去申请动态内存.如下示例中,Test函数的语句GetMemory(str, 100)并没有使str获得期望的内存,str依旧是NULL,为什么? void GetMemory(char *p, int num) { p = (char *) malloc(sizeof(char) * num); } void Test(void) { char *str = NULL; GetMemory(st…
一份代码可以知道具体方式和原理: int main() { int stack_a; int stack_b; static int static_c; static int static_d; int *heap_e; int *heap_f; heap_e = (int *)malloc(10); heap_f = (int *)malloc(10); printf("The a address is %p\n",&stack_a); printf("The b…
一.数组内存释放问题 数组内存的释放可以按照如下语句实现: string [] aa=new string[2]; aa[0]="A"; aa[1]="B"; aa=null; 其中最后一句:aa=null就是释放内存的. 二.关于动态数组 动态数组可以按以下方式申明: string[,] aa; 然后在任何要使用该数组的地方,都可以重新定义数组的大小: aa=new string[2,3];…
  在C语言和C++的动态内存的使用方法是不同的,在C语言中要使用动态内存要包含一个头文件即 #include<malloc.h> 或者是#include<stdlib.h> 然后用C语言的系统函数 void * malloc(usigned size);来获得动态分配的内存,这个函数参数是需要申请的内存的字节数,返回的是一个申请到的内存的首地址,这个返回的内存的类型是 void ,所以需要根据需要进行强制类型转换,例如 int *array; array= (int *)mall…
type TArr = array of TPoint; {把数组先定义成一个类型会方便许多, 这里仅用 TPoint 测试} {删除动态数组指定元素的过程: 参数 arr 是数组名, 参数 Index 是要删除的索引} procedure DeleteArrItem(var arr: TArr; Index: Integer); var Count: Cardinal; begin Count := Length(arr); if (Count = 0) or (Index < 0) or (…
使用二维数组的时候,有时候事先并不知道数组的大小,因此就需要动态的申请内存.常见的申请内存的方法有两种:malloc/free 和 new/delete. 一.malloc/free (1)申请一维数组 void dynamicCreate1Array() { int m; int i; int *p; cout<<("please input the length of data:"); cin >> m; p = (int*)malloc(sizeof(in…
enum class MyEnum{ P1 = , P2, P3, P4, P5 }; MyEnum myEnum = MyEnum::P2; 使用作用域的方式获取并限定P2的值.之所以要使用作用域,是为了避免歧义.比如考虑以下情况 enum class Enum1{ P1 = , P2 = }; enum class Enum2{ P1 = , P2 = }; 两个枚举,里面的元素名字一样,但是如果还是执行 Enum1  myEnum = P2 的话,会出现歧义:这个P2到底是谁的P2.所以c…
IIS - 自动申请.部署Let's Encrypt的免费SSL证书(让网站实现HTTPS协议) 2017-12-19发布:hangge阅读:161   一.HTTPS 协议介绍 1,什么是 HTTPS 协议? HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的 HTTP 通道,即 HTTP 的安全版. 简单来说 HTTPS 就是在 HTTP 上面加了一层 SSL 协议.我们可以在 HTTP 站点上部署…