空间数据

内存越界的问题

≯℡__Kan透↙ 提交于 2020-03-01 08:02:03
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。 来源: CSDN 作者: 蓝谷芮济 链接: https://blog.csdn.net/weixin_42577143/article/details/104572874

浅析VS2010反汇编

China☆狼群 提交于 2020-02-29 07:04:36
第一篇 1. 怎样进行反汇编 在调试的环境下,我们能够很方便地通过反汇编窗体查看程序生成的反汇编信息。 例如以下图所看到的。 记得中断程序的运行,不然看不到反汇编的指令 看一个简单的程序及其生成的汇编指令 #include<stdio.h> #include<windows.h> const long Lenth=5060000/5; int main(){ while(true){ for(long i=0;i<Lenth;i++){ ; } Sleep(10); } } 汇编窗体 2. 预备知识 : 函数调用大家都不陌生,调用者向被调用者传递一些參数,然后运行被调用者的代码,最后被调用者向调用者返回结果,还有大家比較熟悉的一句话。就是函数调用是在栈上发生的,那么在计算机内部究竟是怎样实现的呢? 对于程序,编译器会对其分配一段内存。在逻辑上能够分为代码段。数据段,堆,栈 代码段:保存程序文本。指令指针EIP就是指向代码段。可读可运行不可写 数据段:保存初始化的全局变量和静态变量,可读可写不可运行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态分配内存,向地址增大的方向增长。可读可写可运行 栈(Stack):存放局部变量。函数參数,当前状态。函数调用信息等, 向地址减小的方向增长 。很很重要,可读可写可运行 如图所看到的 寄存器 EAX :累加(Accumulator

基于ArcEngine+C#开发的空间数据管理平台架构设计及功能说明

拟墨画扇 提交于 2020-02-29 05:56:46
一、空间数据管理平台设计说明 1. 概述 ArcCatalog 对空间数据管理基于数据的物理存储关系进行数据的组织和管理,它在要素类基础上引入要素集,用于对具有相同坐标系统和空间范围的一组数据统一组织到同一个目录下,实现对要素集的分类管理。但是,仅利用要素集的方式进行空间数据的组织和管理,无法满足实际空间数据组织管理的要求。 空间数据管理平台基于 SDE 中现有的数据组织管理方式的基础上,通过建立一组数据管理表,扩展了对空间数据的组织和管理,系统采样管理逻辑树的方式按空间数据之间的逻辑关系进行空间数据的组织和管理。 该系统允许用户按需创建自己的空间数逻辑结构,实现对空间数据的按逻辑方式进行组织和管理,通过应用该系统可以方便的实现对空间数据的有序组织和管理应用。 2. 空间数据管理平台类结构图 空间数据管理平台数据管理模型结构如下图: 数据管理目录类是整个空间数据管理的根节点,在根节点下不同类型数据进行分类组织,目前在数据管理目录下系统总体分为三大类数据节点: 2.1. 逻辑数据库节点 逻辑数据库节点是按数据的逻辑关系对空间数据进行分类组织和管理,用户可以在数据管理节点下任意创建逻辑数据库节点。每个逻辑数据库都对应一个具体的物理数据库连接,该物理数据库连接是逻辑数据库中各管理的要素类、要素集、栅格实际存储的位置,不同的逻辑数据库可以使用相同的物理数据库连接

重识JVM(一):运行时数据区域

倾然丶 夕夏残阳落幕 提交于 2020-02-28 05:11:17
记得上一次看jvm相关的知识还是在大四的时候,两年过去了,记忆已经逐渐模糊。现在来重识一下jvm,希望温故而知新,一些重要的知识点我会在博客上把学习的知识记录下来。 想要了解jvm,就一定需要了解java虚拟机是如何使用内存的,要不在出现内存泄漏和内存溢出等问题时,我们是没法准确地排查出错误的,下面就让我一起来重新认识一下java虚拟机在执行java程序的过程中的运行时数据区。 参照上图,我们来进一步了解一下运行时数据区中各个区域的作用和详细情况。 一.程序计数器 1.从最简单的程序计数器说起,程序计数器就是当前线程执行字节码的 行号指示器 ,字节码解释器工作时就是通过改变这个计数器的值来选去下一跳需要执行的字节码指令, 分支, 循环, 跳转, 异常处理,线程恢复等基础功能都需要依赖这个计数器 来完成。 2.每条线程都需要有一个独立的程序计数器, 各条线程之间的计数器 互不影响, 独立存储 , 我们称这类内存区域为"线程私有内存"。 3.如果线程正在执行的是一个Java方法, 这个计数器记录的是正在执行的虚拟机字节码指令的地址; 如果正在执行的是Native方法, 这个计数器值则为空(Undefined)。 此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 二.java虚拟机栈 1.与程序计数器一样, Java虚拟机栈也是线程私有的

猴子都能懂的数据库避坑指南

你离开我真会死。 提交于 2020-02-27 23:41:42
前言 工作的这些年发现一个比较奇怪的现象就是身边无论是工作十多年的老兵,还是初级刚入行的程序员,在高谈阔论技术和趋势的时候都是人工智能,大数据,区块链,各种框架,语言,算法,AI,BI,CI,DI…… 等等,倒是发现很少有人关注数据库,不知道是因为数据库感觉太低端还是太低调,总是不容易被人提起 技术就是这样,不太关注的地方就不会重视,越是不被重视的地方,掉进坑里的概率就会越大,所以就在这里给大家简单聊聊在使用数据库过程中有哪些防掉坑指南,也可以对刚入行的小朋友有一个提醒的作用,万丈高楼平地起,一定要先打好基础再去考虑上层的建筑,不要舍本逐末 本章主要分以下四个小节(预计读完 5 分钟左右): 数据库为什么重要 数据库有哪些使用技巧 数据库有哪些容易掉进去的坑? 深入学习数据库的建议 数据库为什么重要 很多人在开发过程中不太关注数据库,对于表结构的设计也没什么讲究大多属于“能用就行”,但是根据作者将近十年的开发经验来看的话,只要你是从事 Web 相关领域开发你就无法避免不和数据库打交道, 在Web开发中大多功能操作本质上都是对数据库进行操作 ,不管你用是 Pythod,Java,Ruby 等语言进行 Web 开发,你其实都是在面向数据库进行编程,很多 Web 框架作者为了避免程序员接触数据库的相关知识甚至还封装了一层 ORM (Object Relational Mapping

圆形缓冲区-MapReduce中的

假如想象 提交于 2020-02-27 15:54:16
这篇文章来自一个读者在面试过程中的一个问题,Hadoop在shuffle过程中使用了一个数据结构-环形缓冲区。 环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。 因为有简单高效的原因,甚至在硬件都实现了环形队列。 环形队列广泛用于网络数据收发,和不同程序间数据交换(比如内核与应用程序大量交换数据,从硬件接收大量数据)均使用了环形队列。 环形缓冲区数据结构 Map过程中环形缓冲区是指数据被map处理之后会先放入内存,内存中的这片区域就是环形缓冲区。 环形缓冲区是在MapTask.MapOutputBuffer中定义的,相关的属性如下: // k/v accounting // 存放meta数据的IntBuffer,都是int entry,占4byte private IntBuffer kvmeta; // metadata overlay on backing store int kvstart; // marks origin of spill metadata int kvend; // marks end of spill metadata int kvindex; // marks end of fully serialized records //

Linux运维---磁盘存储-2. RAID

╄→гoц情女王★ 提交于 2020-02-27 15:01:07
随着单块磁盘在数据安全、性能、容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁盘按不同的方式组合起来,形成一个磁盘组,以获得比单块磁盘更高的数据安全、性能、容量。 一. 常见的RAID 级别 RAID有RAID0~RAID7几种级别,另外还有一些复合的RAID模式,比如:RAID10、RAID01、RAID50、RAID53。 常用的RAID模式有RAID0、RAID1、RAID5、RAID10。 RAID0 RAID0也就是常说的数据条带化(Data Stripping),数据被分散存放在阵列中的各个物理磁盘上,需要2块及以上的硬盘,成本低,性能和容量随硬盘数递增,在所有的RAID级别中,RAID 0的速度是最快的,但是RAID 0没有提供冗余或错误修复能力,如果一个磁盘(物理)损坏,则所有的数据都无法使用。 对于有容灾模式的RAID阵列,某块磁盘损坏时,只要换上新的硬盘即可,阵列系统会自动同步数据到新的硬盘。(不支持热插拔的话,需要先关机再开机) RAID1 RAID1也就是常说的数据镜像(Data Mirroring),2块及以上的硬盘(偶数个),被分为2组,数据在每组磁盘中各有一份,若其中一组有磁盘损坏,另一组可以保证数据访问不会中断

JVM的并发问题

你说的曾经没有我的故事 提交于 2020-02-26 15:18:34
Java内存模型 1.程序,进程,线程的基本概念?   1.程序:是指完成某一项任务的代码序列(静态的概念)   2.进程:程序在某些数据上的一次运行(动态概念)   3.线程:一个进程可能包含一个或者多个线程(占有资源的独立单元) 2.JVM的内存区域?         JVM内存模型 VMstack    1.方法区: 主要存储类信息(通过classLoader:类加载器加载进来的),常量信息,使用static关键字修饰的属性,方法,代码块 等。当使用反射原理进行类加载时其实就是调用的方法区的数据。( 信息共享 )    2.Java堆区: 主要存放实例对象,当使用new关键字创建一个对象的时候,就会把相关信息放在堆区域,所以这也是GC活动的主要区域,同时也是发生OOM(内存溢出)的主要区域。( 信息共享 )    3.VMstack(虚拟机栈): Java方法运行的内存模型,在VMstack中,每一个方法都有唯一的一个栈帧与之对应,存放这个方法的一些私有信息,比如:局部变量,引用类型数据的地址,操作数栈等...。因为是存储一个方法的信息,所有 不能实现数据共享 ,是 私有 的。    4.PC(程序计数器): 是Java的私有数据,这个数据就是执行下一条指令的地址。( 私有的 )    5.Native method stack(本地方法栈): 与JVM的native。(

浅谈5种IO模型的概念

ぐ巨炮叔叔 提交于 2020-02-25 20:53:06
文章目录 IO的概念 什么是用户空间和内核空间 同步、异步的概念 什么是阻塞和非阻塞 5种IO模型详解 阻塞IO模型 非阻塞IO模型 IO复用模型 select ,poll,epoll的区别 信号驱动IO模型 全异步IO模型 5种IO模型的区别 IO的概念 IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 比如你打开浏览器,访问腾讯首页,浏览器这个程序就需要通过网络IO获取腾讯的网页。浏览器首先会发送数据给腾讯服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,腾讯服务器把网页发过来,这个动作是从外面接收数据,叫Input。所以,通常,程序完成IO操作会有Input和Output两个数据流。当然也有只用一个的情况,比如,从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。 流是什么?可以把流想象成一个水管,数据就是水管里的水,但是只能单向流动。 Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去 。对于浏览网页来说,浏览器和腾讯服务器之间至少需要建立两根水管,才可以既能发数据,又能收数据。 I

SQL Server 临时表 Vs 表变量

强颜欢笑 提交于 2020-02-25 16:00:45
开始 说临时表和表变量,这是一个古老的话题,我们在网上也找到很多的资料阐述两者的特征,优点与缺点。这里我们在SQL Server 2005\SQL Server 2008版本上通过举例子,说明临时表和表变量两者的一些特征,让我们对临时表和表变量有进一步的认识。在本章中,我们将从下面几个方面去进行描述,对其中的一些特征举例子说明: 约束(Constraint) 索引(Index) I/0开销 作用域(scope) 存儲位置 其他 例子描述 约束(Constraint) 在临时表和表变量,都可以创建Constraint。针对表变量,只有定义时能加Constraint。 e.g.在Microsoft SQL Server Management Studio(MSSMS)查询中,创建临时表并建Constraint场景,<脚本S1.> Use tempdbgoif object_id('Tempdb..#1') Is Not Null Drop Table #1 GoCreate Table #1( ID int, Nr nvarchar(50) not null, OperationTime datetime default (getdate()), Constraint PK_#1_ID Primary Key (ID))Alter Table #1 Add Constraint CK_