自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿达King哥的博客

如何看透了生活的本质依然热爱生活

  • 博客(279)
  • 资源 (13)
  • 问答 (1)
  • 收藏
  • 关注

原创 计算机知识结构梳理

有关自身经历的一些想法从事计算机及相关工作已有20年,每每想起自身学习的过程,心里总觉得有些曲折,其中既有自身认识的问题,也有学校课程安排的问题。自身问题不想多谈,毕竟每个人所面对的环境和生活不一样。谈及学校的课程安排,我倒有不吐不快之感。计算机专业往往采取教授编程语言开始,然后安排大量课时给如英语,大学物理,数学课程。中间穿插模拟电路,数字电路,汇编语言,操作系统等相关课程。每每想起总觉得前后不搭,大学最后的课程安排又让人觉得过于追求即时效果而缺少基础研究。回想走过的弯路,心中不免烦乱,加之工作要求,

2022-02-09 22:00:20 7259

原创 C++虚函数表

本文介绍了使用Visual Studio和GDB调试工具分析C++类内存布局的方法。通过在VS中配置/d1 reportAllClassLayout命令,可以输出类的内存结构。文章重点分析了三种情况:无虚函数类、带虚函数类以及继承类。通过反汇编和内存监视,展示了虚函数表(__vfptr)的结构,说明虚函数调用机制。对于继承类,详细演示了基类函数被覆盖时的内存布局变化。调试结果表明,虚函数表指针位于对象首地址,其中保存了虚函数的调用地址。

2025-05-26 10:33:13 387

原创 openjdk底层(hotspot)汇编指令的内存分布

本文介绍了内存分段机制及其在JVM中的实现。通过CodeSection类模拟内存中的段结构,详细说明了其关键属性如_start、_end、_limit等的作用。在JVM中,CodeBuffer类用于管理不同类型的CodeSection(常量段、指令段、桩代码段),并展示了指令插入指令段(_insts)的具体过程。文章还通过gdb调试示例,演示了如何在实际运行中查看CodeSection的内存布局,说明其起始地址对齐和段长度设计对CPU访存性能的优化。

2025-05-25 23:04:03 881

原创 openjdk底层(hotspot)汇编指令调用(五)——内存访问

在aarch64架构下,src\hotspot\cpu\架构文件夹中的文件如assembler_xx.hpp和register_xx.hpp等,主要涉及寄存器定义和汇编编码函数的实现。文章进一步探讨了计算机中寄存器和内存之间的数据访问方式,特别是在x86架构下的访存模型。通过具体示例,如movl %rdi, (%rbp),展示了如何将寄存器中的数据存储到内存中,或从内存加载数据到寄存器。此外,文章还介绍了x86架构中的基地址、变址和比例因子等概念,并说明了如何在hotspot的x86访存模型中通过Addre

2025-05-20 11:01:00 539

原创 C#接口的setter或getter的访问性限制

在C#中,可以通过限制setter的访问性来实现只对外提供getter,而属性的赋值只能在内部进行。例如,在LibA命名空间中定义一个接口ITranslation,其中MyDict属性的setter被标记为internal,这样外部只能读取该属性,而不能直接设置。在LibB中实现该接口时,setter只能在内部使用。通过反射动态创建对象时,可以在LibA中访问setter进行赋值。这种设计适用于需要控制属性访问权限的场景,确保属性的安全性。

2025-05-19 15:07:38 320

原创 openjdk底层(hotspot)汇编指令调用(四)——发送指令到内存

文章主要讨论了JVM如何将指令发送到代码段中执行。首先,JVM通过软件模拟计算机行为,将内存分为数据段和代码段。在指令编码完成后,JVM通过assembler_aarch64.hpp文件中的add函数将指令发送到代码段。

2025-05-15 11:43:33 481

原创 openjdk底层(hotspot)汇编指令调用(三)——编码

本文以AArch64架构的add x0,x1,x2指令为例,详细介绍了如何实现指令编码。

2025-05-13 16:55:22 467

原创 雅思口语 Part 1 Math

雅思口语King在回答关于数学的问题时,首先强调了数学在日常生活中的重要性,特别是在没有计算器的情况下,乘除法在计算折扣价格时非常有用Math Do you think mathematics is important? Well,Yes. From my personal perspective, mathematic is of great importance for us in our daily lives since it can help us to r...

2025-05-13 15:33:12 1153

原创 C++的构造函数和析构函数

构造函数和析构函数在C++中分别用于对象的初始化和清理。构造函数在对象创建时自动调用,其名称必须与类名相同;析构函数在对象销毁时调用,名称前加~符号。对象的生命周期由{}界定,构造函数在对象声明时调用,析构函数在对象离开作用域时调用。例如,在函数内部,对象的创建和销毁顺序遵循最近{}原则,即先创建的对象后销毁。通过合理使用构造函数和析构函数,可以确保资源的正确分配和释放。

2025-05-12 17:05:20 240

原创 openjdk底层(hotspot)汇编指令调用(二)——寄存器定义

通过面向对象编程思想,定义了寄存器类和汇编器类,分别用于管理寄存器的名称、值以及汇编指令的编码规则。为了支持多平台,OpenJDK在share/asm目录下抽象了寄存器和汇编器的基类。

2025-05-12 10:13:37 1035

原创 openjdk底层(hotspot)汇编指令调用(一)——汇编指令及指令编码基础

计算机通过识别0和1的电信号执行指令,早期程序员直接使用二进制编程,但易出错且不便记忆。为此,厂商定义了汇编指令,如x64平台的push %rbx对应二进制0x53。

2025-05-11 20:58:23 1004

原创 JVM局部变量表和操作数栈的内存布局

局部变量表(locals)包括了函数内部的临时变量和形参,另外还包括了当前函数的this指针操作数栈实现了Java虚拟机的栈式操作在openjdk的实现中,局部变量表位于解释栈的高地址处,用locals寄存器定位局部变量表并根据偏移值获取值;操作数栈位于解释栈的低地址,用sp寄存器定位实现字节码逻辑。

2025-05-07 11:19:12 514

原创 栈是如此重要——C函数栈传参

可以看到add2的函数栈在构建时,在rbp的高8位是回到main函数的地址(RA)。在C的main函数调用add2函数前,将第一个参数和第二个参数分别放在了rdi和rsi寄存器中,那么在进入add2的汇编片段时,这2个寄存器将会将值放在内存栈中。由于是O0选项进行的gcc编译,因此对C程序不做优化,上述汇编是将内存栈空间作为过渡,将值传递给参数寄存器。,当main调用add2时会传2个参数到add2执行的汇编片段,那么这2个参数是如何在栈上布局的呢?在进入add2之前,栈的形式如下。

2025-04-30 16:46:19 416

原创 栈是如此重要——C函数栈

栈为先进后出的数据结构在《数据结构》中有C的栈实现算法,然而很少看到对于栈有什么作用的描述。考虑一个场景,当CPU在计算时需要将某些值临时保存,待当前需要处理的事情处理完毕之后,重新把这些数据还原。此时应该怎样做?典型的应用就是函数调用,比如add2(2,3);return 0;在上述程序中,add2会调用add3函数,当调用add3函数前,计算机必须保留下add2函数的位置,以便在add3结束之后可以返回到add2处理的位置。此时,栈就起到了记录现场的作用。

2025-04-27 11:22:31 692

原创 字节,字节码,字节码文件,字节码指令

计算机一般是一个字节一个字节的读取数据,使用字节进行编码符合计算机的读取数据的流程。第三,使用通用的字节码指令针对的是纯软件的虚拟机,其内容与平台无关。因此使用字节码的程序很方便移植,甚至可以说不需要任何操作,直接放在有Java虚拟机的机器上运行即可,实现了。这些字节根据Java虚拟机规范的要求在不同的位置表达不同的意思。由于电路实现上的原因,计算机的计数方式为二进制,即由0和1组成。为了方便的表示字节,一般采用16进制的形式。生成的.class文件为01组成的文件,使用vs code的。

2025-04-24 09:43:37 946

原创 配置openjdk调试环境

如何调试openjdk

2025-04-22 21:02:45 772

原创 关于编译和调试OpenJDK的一些问题

由于`OpenJDK`的编译环境是跟操作系统紧密相关的,所以,当分析`OpenJDK`代码的时候,首先应该阅读`README.md`,确定当前阅读的`OpenJDK`能够在哪些环境下进行编译和调试。这里将一些基本需要解决的问题进行阐述。

2025-04-21 14:25:11 567

原创 在Ubuntu 18.04下编译OpenJDK 11

链接: https://pan.baidu.com/s/1QAdu-B6n9KqeBakGlpBS3Q 密码: 8lho不同版本的jdk会要求在不同版本的Ubuntu下编译,不要用太高版本的Ubuntu或者gcc,特别是gcc,这个跟glibc的版本还绑定,如果gcc版本太高,则glibc版本也高,也会影响openjdk的编译。gcc7,freetype2可以直接使用apt-get install安装先configure,再makeconfigure可以参考openjdk/doc/building.htm

2025-04-21 13:50:36 490

原创 Java虚拟机(JVM)平台无关?相关?

平台无关是因为其执行过程是由纯软件实现的栈式计算机实现,而平台相关是因为Java虚拟机的具体操作跟平台指令和操作系统相关。不仅如此,为了能够实现**“一次编译,处处执行”**,Java虚拟机还能根据不同的操作系统进行适配,对于有些与操作系统和CPU结合的部分,也提供了不同的实现。所以,如果有程序要实现一个加法,那么在计算机底层执行时,其执行的内容是不一样的。上生成的.class文件,其内容是一样的。Tape是输入数据,Program是针对这些数据进行计算的程序,中间横着的方块表示的是机器的状态。

2025-04-17 17:25:21 837

原创 C++的*了又*

先看下面一段代码主函数这里首先在堆中创建了一个HeapWord对象的空间,然后其首地址放入heapword中然后又在堆中创建一个HeapWord对象的空间,然后其首地址放入p中然后声明一个变量p1,该对象指向一个指针,该指针指向的是HeapWord类型。

2025-04-11 16:30:30 204

原创 Unable to create an object of type ‘DbContext‘. For the different patterns supported at 原因

如果没有设置为“始终复制”则可能导致其配置文件无法复制到bin目录下,则。有可能是代码中设置数据库连接的文件没有设置为“始终复制”时找不到对应的数据库连接。

2024-08-19 14:00:26 972

原创 如何在asp.net mvc的视图中判断Model的一个属性为null

假设Model.InstFormatID为空。因为最后渲染成html的时候会变成下面的代码。所以得绕一下,改动代码如下。使用如下代码是不能判断的。

2024-05-20 16:52:50 360

原创 JQuery删除指定行

在增加行的js代码中指定函数delInst进行删除行操作。注意,这里传$(this)参数作为当前行的引用。,然后调用JQuery的remove操作即可。

2024-02-05 09:36:32 670

原创 JQuery的$(this)在if之后会变化

此时用浏览器调试发现,每选择一次下拉框就会导致链接字符串变长。$(this)`了。此时不再有链接长度变长的情况。

2024-01-22 16:47:38 513

原创 JQuery异步加载表格选择记录

首先在页面中定义一个表格对象

2024-01-09 09:07:12 568

原创 在ASP.NET MVC中使用JQuery提供的弹出窗口(模态窗口)

使用图层灵活显示在浏览器的任何位置。默认情况下指定不可见。

2024-01-08 15:35:48 950

原创 运算符的优先级(规矩是人定的)

先乘除后加减的本质就是运算符的结合性9+5*2等价于9+(5*2)这里要注意一个问题,无论是都是左结合的。因此加减法的产生式为乘除法的产生式为现在问题是如何把上述两个产生式混合在一起,并且符合先乘除后加减。

2024-01-02 22:38:03 727

原创 运算符的结合性(形神兼备)

在编译原理中,产生式就是权威。表达式如果以某产生式进行语法分析,那么就只能按照它的方式进行表达,且不能具有二义性。但是,在表达式中有时会涉及打括号的问题。很多时候,在原表达式中打括号和原表达式等价。比如但有时候却不等价 ,比如在编译原理中,括号代表了运算符的结合性,如果运算符以左侧为标准则被称为左结合的,此时在左侧打括号和不打括号等价。反之亦然。

2023-12-26 23:41:57 904

原创 二义性(说话装X有罪)

上述二者都是二义性表达,在离散数学上来看都不具有唯一表示。在《编译原理(第二版)》中对二义性有这样的定义一个文法可能有多棵语法分析树能够生成同一个给定的终结符号串,这样的文法称为具有二义性(ambiguous)。注:ambiguous,在英文中是模糊的意思。那么反言之,如果表达式不具有二义性则应为一个文法如果有且只有一棵语法分析树可以生成给定的终结符号串,那么该文法不具有二义性。有关语法分析树的内容参见语法分析树(先看例子再看定义)-优快云博客说话要说明白,意思表达要唯一,不要没事装逼!

2023-12-25 15:17:07 1010

原创 语法分析树(先看例子再看定义)

如果非终结符A有一个产生式A->XYZ,那么在语法分析树种就可能有一个标号为A的内部结,该结点有3个子结点,从左到右标号分别为X、Y、Z。如图给定一个上下文无关文法,则该文法就有一颗语法分析树(parse tree)

2023-12-23 23:16:59 1219

原创 编译器语法推导(1)基本定义(逐句举例对照)

在中,我们讲到了两个概念,分别是终结符号和非终结符号。回忆一下二者。词法单元,不可再变词法变量,尚未确定比如其终结符号为if, (), {}非终结符号为expr, stmt。

2023-12-22 09:46:13 434

原创 什么是文法产生式(尽量写简单了)

一个典型的if-else语句可由下述构造规则表达其中变量名全称stmtstatementexprexpression比如if(i==0){return 1;涉及术语产生式(production)终结符号(terminal)if, (), {}非终结符号(nonterminal)expr, stmt上下文无关文法(context-free grammar)由四部分构成终结符号集合:也被称为”词法单元“非终结符号集合:也称为”语法变量“产生式集合。

2023-12-21 16:10:34 970

原创 静态单赋值(SSA)(只讲形式不讲实现)

除了三地址代码之外,静态单赋值(SSA)是另一种表现形式。

2023-12-21 14:47:47 630

原创 什么是DAG(只讲概念不讲算法)

编译器的目的是将源程序编程目标代码(汇编)放入计算机执行。这里有一个问题,世界上有很多不同架构的CPU,比如x86,ARM等。不同架构的CPU有不同的汇编。于是上图带来的问题是直接从源程序翻译成不同架构CPU的目标代码工作量太大且容易出错。正确的做法是在和中间加一层作为桥梁,将其衔接起来。

2023-12-21 11:24:15 1118

原创 什么是抽象语法树和三地址表达(通俗理解版)

根据《编译原理(第2版)》第二章用通俗的语言解释什么是抽象语法树和三地址表达

2023-12-20 16:46:16 703 2

原创 ASP.NET Core MVC依赖注入理解(极简个人版)

MVC的依赖注入其实很简单

2023-12-19 11:25:25 1356

原创 Selector选择器在AspNetCore中的用法

项目编辑过程中会选择其所属的上级项目,而上级项目在数据结构中是以ParentID的方式表达,而非Project类型,用户不会记录也不应该记录ID值,因此应提供Selector项目下拉框供用户选择。但是MVC的Razor页面绑定数据时绑定的时单个对象或者IEnumerate集合对象,因此,如果在页面上绑定项目列表则成为完成的难题。

2023-09-07 14:42:06 241

原创 How to resolve the update problem tracking instance in many-to-many in EFCore 7.0.10

【代码】How to resolve the update problem tracking instance in many-to-many in EFCore 7.0.10。

2023-09-01 14:17:06 159

原创 openjdk11 compiling failure undefined JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to

【代码】openjdk11 compiling failure undefined JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to。

2023-05-26 14:34:31 192

原创 VMWare安装vmware tools的方法

【代码】VMWare安装vmware tools的方法。

2023-05-25 15:58:09 181

VS2005最简单的OpenGL例子

最简单的OpenGL例子。http://www.cnblogs.com/songlotus/articles/965368.html#1406601

2010-02-12

单相全波整流Protues仿真

单相全波整流Protues仿真,大家看看吧。

2012-02-12

CRC16校验程序

自己写的CRC16校验程序,用的是查表法,比计算法速度快。

2015-12-12

NUnit 3.0.1

2015.12.1的版本,用于C#的单元测试。

2015-12-14

桥式电容滤波电路Protues仿真

桥式电容滤波电路Protues仿真,大家看看吧。

2012-02-12

单相半波整流电路Protues仿真

单相半波整流电路Protues仿真,大家看看吧。

2012-02-12

桥式整流电路Protues

桥式整流电路Protues,大家看看吧。

2012-02-12

稳压管Protues仿真

Protues仿真的稳压管,大家可以看看。

2012-02-12

ARM汇编语言的系统号调用例程

使用AArch64的系统调用实现退出功能,这个是学习ARM汇编的第一步arch/ABI instruction syscall # retval arm64 svc #0 x8 x0 arch/ABI instruction syscall # retval arm64 svc #0 x8 x0

2020-09-27

图形学DDA画直线算法

DDA画直线算法,VS2005的C++,OpenGL实现。代码有点问题,需要把x0,y0这些变量的声明类型改为float。我不知道怎么删除重新上传,所以只有让大家自己改了。

2010-02-12

Mapxtreme 2004开发指南中文版

Mapxtreme 2004开发指南中文版,具体开发细节其他版本的大同小异。

2011-07-25

图形学Bresenham算法

VS2005下的C++控制台程序,需要在本地安装OpenGL才可以运行

2010-02-15

TreeBuffer

Lazy Add Item

2007-06-03

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除