1 #define IOS ios_base::sync_with_stdio(0); cin.tie(0); 2 #include <cstdio>//sprintf islower isupper 3 #include <cstdlib>//malloc exit strcat itoa sys ...
分类:
其他好文 时间:
2019-11-22 19:13:32
阅读次数:
70
/* 输入先序和中序,构造二叉树,并输出该二叉树的层序、前序、中序、后序遍历结构 输入后序和中序,构造二叉树,并输出该二叉树的层序、前序、中序、后序遍历结构 */ #include <stdio.h> #include<string.h> #include<malloc.h> typedef str ...
分类:
其他好文 时间:
2019-11-20 12:40:49
阅读次数:
56
从上面这个图我们总体上对JVM的结构特别是内存结构有了比较清晰的认识,虽然在JDK1.8+的版本中,JVM内存管理结构有了一定的优化调整。主要是方法区(持久代)取消变成了直接使用元数据区(直接内存)的方式,但是整体上JVM的结构并没有大改,特别是我们最为关心的堆内存管理方式并没有在JDK1.8+的版本中有什么变化,所以图中的结构整体上是没有什么不准确的,之所以将方法区以及持久代标注出来,主要还是为了起到对比认识的作用,大家知道就可以了。
关于持久代元数据区的使用问题,目前可以理解就是使用的物理内存,理论上是不受JVM自动内存回收机制管理的,如果不设置参数大小默认最大使用限制就是操作系统可用物理内存的大小,设置了-XX:MetaspaceSize参数的话,JVM就会在使用物理内存空间时自己进行限制。
至于直接内存与物理内存到底是不是一回事,我认为对于我们理解上没有区别,只是概念的区别,另外就是对这块内存使用细节上的区别,如果不受JVM的自动回收管理,那么怎么管理呢?说到底还是JVM本身在直接使用物理内存或者说是直接内存(用时直接“malloc”物理内存区域,而不再是JVM进程启动时初
分类:
编程语言 时间:
2019-11-19 01:19:54
阅读次数:
88
1.c++ 标准 new 失败是抛出异常的,Visual C++ 6.0中返回一个NULL指针. 使用new(std::nothrow)可以保证失败时返回NULL; 因此完全可以 #define new new(std::nothrow) . 2.使用 malloc/calloc 等分配内存的函数时 ...
分类:
其他好文 时间:
2019-11-15 14:31:34
阅读次数:
86
栈是实现管理内存的一种方式,其特点是先进后出,一般用于存储程序的临时变量,全局变量等数据。 #include<stdio.h> #include<string.h> #include<malloc.h> //定义栈,入栈,出栈,遍历栈 typedef struct { int data[100]; ...
分类:
编程语言 时间:
2019-11-14 23:53:06
阅读次数:
144
1. 一个结构体变量的指针是该结构体变量所占据内存段的起始位置,形如: struct 结构名 * 结构指针变量名 2. 赋值是把结构变量名首地址赋予该指针变量,访问结构变量名成员的常见方式为: 指针变量名->成员名 (*指针变量名).成员名 3. malloc返回的是一个指向分配域起始地址的指针,没 ...
分类:
其他好文 时间:
2019-11-09 21:24:56
阅读次数:
80
https://pingcap.com/blog-cn/flame-graph/ 因为 TiKV 是自己内部使用了 jemalloc,并没有用系统的 malloc,所以我们不能直接用 perf 来探查系统的 malloc 函数。幸运的是,perf 能支持动态添加探针,我们将 TiKV 的 mallo ...
分类:
Web程序 时间:
2019-11-09 17:43:21
阅读次数:
96
在正式开始今天的博文之前,先看一段代码,思考这段代码有可能出现的情况: int main() { int j, b[10]; for(j = 1; j <= 10; ++j){ b[j] = 0; } } 看完这段代码后,如果觉得这段代码没有什么坑,那不妨注意一下j的范围是从1 10,而b[10]会 ...
分类:
其他好文 时间:
2019-11-09 13:45:18
阅读次数:
85
一、new和delete C语言提供了malloc和free两个系统函数,完成对堆内存的申请和释放。而C++则提供了两个关键字new和delete; 1.1 规则 new/delete是关键字,效率高于malloc和free。 配对使用,避免内存泄漏和多重释放。 避免交叉使用,比如malloc申请空 ...
分类:
编程语言 时间:
2019-11-08 20:59:32
阅读次数:
99
动态分配也需要一个值来确定数组的长度,指不定过这个值可以是动态的值,而不是常量。 1.malloc int *p=(int*)malloc(n*sizeof(int)); 其中n是动态数值,表示数组的大小。 2.vector 动态分配一维数组: int n=3; vector<int> a(n); ...
分类:
编程语言 时间:
2019-11-05 13:18:41
阅读次数:
103