php中的oop思想,oop_php oop思想_oop和ood

article/2025/10/3 0:42:42

db56ce859b53ff0c8adbf75193eba663.png

我想从一个游戏程序员的角度探讨OOP的一个问题──性能。

现时C++可以说是支持OOP范式中最为常用及高性能的语言。

历史上,OOP大概是60年代出现,而C++诞生于70年代末。现在的硬件和当时的有很大差异,其中最大的问题是内存墙_百度百科。

图1: 处理器和内存的性能提升比较,处理器的提升速度大幅高于内存[2]。图1: 处理器和内存的性能提升比较,处理器的提升速度大幅高于内存[2]。

跟据Numbers Every Programmer Should Know By Year:

图2:2014年计算机几种操作的潜伏期(latency)。图2:2014年计算机几种操作的潜伏期(latency)。

从这些数据,我们可以看出,内存存取成为现代计算机性能的重要瓶颈。然而,这个问题在C++设计OOP编程范式的实现方式之初应该并未能考虑得到。现时的OOP编程有可能不缓存友好(cache friendly),导致有时候并不能发挥硬件最佳性能。以下描述一些箇中原因。

bf56333eacb64d3373c13db09575a078.png

1. 过度封装

使用OOP时,会把一些复杂的问题分拆抽象成较简单的独立对象,通过对象的互相调用去实现方案。但是,由于对象包含自己封装的数据,一个问题的数据被分散在不同的内存区域。互相调用时很可能会出现数据的cache miss的情况。

2. 多态

在C++的一般的多态实现中,会使用到虚函数表。虚函数表是通过加入一次间接层来实现动态派送。但在调用的时候需要读取虚函数表,增加cache miss的可能性。基本上要支持动态派送,无论用虚函数表、函数指针都会形成这个问题,但如果类的数目极多,把函数指针如果和数据放在一起有时候可放缓问题。

3. 数据布局

虽然OOP本身并无限制数据的布局方式,但基本上绝大部分OOP语言都是把成员变量连续包裹在一段内存中。甚至使用C去编程的时候,也通常会使用到OOP或Object-based的思考方式,把一些相关的数据放置于一个struct之内:

即使不使用多态,我们几乎不加思索地会使用这种数据布局方式。我们通常会以为,由于各个成员变量都紧凑地放置在一起,这种数据布局通常对缓存友好。然而,实际上,我们需要考虑数据的存取模式(access pattern)。

5addf8737a2bbda62e09f342e045d116.png

在OOP中,通过封装,一个类的各种功能会被实现为多个成员函数,而每个成员函数实际上可能只会存取少量的成员变量。这可能形式非常严重的问题,例如:

在这种模式下,实阶上只存取了两个成员变量,但其他成员变量也会载入缓存造成浪费。当然,如果在迭代的时候能存取尽量多的成员变量,这个问题可能并不存在,但实际上是很困难的。

如果采用传统的OOP编程范式及实现方式,数据布局的问题几乎没有解决方案。oop所以在[1]里,作者提出,在某些情况下,应该放弃OOP方式,以数据的存取及布局为编程的考虑重中,称作面向数据编程(data-oriented programming, DOP)。

有关DOP的内容就不在此展开了,读者可参考[1],还有[3]作为实际应用例子。

[1] ALBRECHT, “Pitfalls of Object Oriented Programming”, GCAP Australia, 2009. research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf

[2] Hennessy, John L., and David A. Patterson. Computer architecture: a quantitative approach. Elsevier, 2012.

[3] COLLIN, “Culling the Battlefield”, GDC 2011. dice.se/wp-content/uploads/CullingTheBattlefield.pdf

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/tongxinshuyu/article-47256-1.html


http://chatgpt.dhexx.cn/article/PyQIjjue.shtml

相关文章

java里oop思想_(一)OOP思想详解

1.关于抽象的进步。面向对象OOP的设计思路其实是把“抽象”这种编程方法进行了新的解释说明,把具体的人或事务抽象成了“类”“对象”的形式。 面向对象的主要思想: 万物即对象 程序是对象的组合 每个对象都有自己的空间,可以容纳其他对象 每…

Java面向对象OOP思想概述

Java设计思想 OOP思想(Object Oriented Programming)类和对象接口抽象类OOP三大特性封装继承多态 OOP复用的形式 OOP思想(Object Oriented Programming) 类和对象 在面向对象中,类和对象是最基本、最重要的组成单元 类:类可以说是一个模板,…

java里oop思想_Java OOP 思想解析

因为有着一年半的iOS开发经验(OC也是一门面向对象的语言)所以在对Java的面向对象的理解上也是有着自己的理解,今天就和大家分享一下。 面向对象中最为重要的三大思想就是:继承、封装、多态。本文将以一个实例场景来分析Java中的OOP。现有一个场景&#x…

OOP思想

OOP思想 OOP思想在框架实战中的具体体现: OOP程序员遇到问题时的思考方式: –》 利用现有的方法和对象来搞定 --》 去找方法或对象来搞定 去哪找呢? –》 从父类或者父接口找 idea在OOP开发上还是提供了很多很好用的工具,可…

OOP基本思想

面向对象思想 面向对象概念:是指把所有对象封装为对象,提高代码的复用性 【复用性就是指一段代码可以重复使用】 一:面向对象四大步骤: 1:给计算机定义一个类 【一个类又两部分组合:成员变量和成员方法】 2…

Kali Linux信息收集工具栏之Dmitry tools(工具)

首先这款工具是信息收集工具里的第一位,大体作用是对IP或者web域名进行whois查询,它的用参数如下图: 首先我们需要知道整个格式是这样的 dmitry [-winsepfb] [-t 0-9] [-o%host.txt] IP或者web域名 #环境变量 (空格接参数) -t在…

白帽子黑客与网络安全工程师教你:如何使用DMitry域名查询工具技巧?

课前声明: 1、本分享仅做学习交流,请自觉遵守法律法规! 2、搜索:Kali 与编程,学习更多网络攻防干货! 3、Kali 与编程每天准时更新,敬请学习和关注! 正文部分 一、背景介绍 DMitry 工…

Kali linux-信息收集-dmitry

信息收集-dmitry DMitry(Deepmagic Information Gathering Tools 深度信息收集工具)是一个kali linux下用C语言写的工具。主要功能为端口扫描,whois主机IP和域名信息,从Netcraft.com获取主机信息,子域名搜集。 帮助: -o 保…

荆棘合成器-Plugin Alliance Dmitry Sches Thorn 1.2.2 WiN-MAC

win:VSTi, VSTi3, AAX* (*MOD.) 288M | mac:VST, VST3, AU 113M Thorn是一款软件合成器,旨在易于使用并提供出色的声音。在Thorn中,简单意味着简单明了,并同时提供高级声音控制。直观的工作流程&#xff0c…

综合扫描工具 -- dmitry

今天的云很好看,我想拍给你看,却想到我们很久不联系了,突然觉得,云也没那么好看了。。。 ---- 网易云热评 Dmitry是一款一体化的信息收集工具 一、环境:kali201201 二、用法: -o Save output to %host.txt or to …

Kali 工具系列【4】深度信息挖掘工具Dmitry使用技巧

一、Dmitry是什么? DMitry是黑客渗透流程中进行深度信息收集的利器,它是一个由C语言编写的UNIX/(GNU)Linux命令行工具,无GUI操作界面,需掌握其常用使用参数。 二、Dmitry可以用来做什么? 1、进行TCP端口扫描,收集端口…

DNS收集分析DMitry

Dmitry是一个由C语言编写的UNIX/(GNU)Linux命令行工具,它可用于收集主机相关信息,比如子域名、Email地址、系统运行时间信息。 列出帮助信息: $ dmitry –help 查看更完整的文档: $ man Dmitry 选项详解: -o filename 创建as…

渗透前戏:dmitry简介

Dmitry是一款有深度的信息挖掘机,用自己的小破网站来做个实验,实际体验真的很鸡肋,我要对这个深度信息挖掘机做一个深深的鄙视。 查询IP地址信息: dmitry -i 104.244.88.156 原来我的网站的HostName是16clouds.com的二级域名。 查…

域名查询工具DMitry

DMitry工具是用来查询IP或域名WHOIS信息的。WHIOS是用来查询域名是否已经被注册及已经注册域名的详情大的数据库(如域名所有人和域名注册商)。使用该工具可以查询到域名的注册商和过期时间等。 简单使用 dmitry [-winsepfb] [-t 0-9] [-o %host.txt] h…

【kali-信息收集】(1.3)探测网络范围:DMitry(域名查询工具)、Scapy(跟踪路由工具)

目录 一、简介 1.1、概述: 二、工具 2.1、域名查询工具DMitry 简介: 命令: 使用: 分析: 命令: 2.2、跟踪路由工具Scapy 简介: 命令: 基础: ARP().display()…

最新kali之dmitry

描述: Deepmagic信息收集工具。   DMitry(Deepmagic信息收集工具)是UNIX /(GNU)Linux命令行应用程序,能够收集有关主机的尽可能多的信息。   DMitry的基本功能允许从目标上的简单whois查找到正常运行时…

KaliLinux-dmitry使用详解

文章目录 DMitry简介常用参数使用实例 DMitry简介 Dmityr算是一款比较老的工具,是一个简单的主机信息扫描程序,工作原理是通过whois和netcraft查询主机信息,并且可以进行一些简单的端口扫描域名检测等操作。(缺点:需要链接google…

Kali信息收集工具Dmitry

Dmitry信息收集工具 功能:它可以收集以下信息 根据IP或者域名来查询主机上的whois信息在netcraft.com(提供安全服务)的网站上挖掘主机信息查找目标域中的子域查找目标域中的邮件地址探测目标主机打开的端口、被屏蔽的的端口和关闭的端口 D…

kali dmitry的使用

kali dmitry的使用 DMitry是用C编码的Linux命令行应用程序。DMitry具有收集尽可能多的有关主机的信息的能力。基本功能能够收集可能的子域,电子邮件地址,正常运行时间信息,tcp端口扫描,whois查找等。 参数用法: -o 将输…

Kali之dmitry使用教程

一、Dmitry是什么? DMitry是黑客渗透流程中进行深度信息收集的利器,它是一个由C语言编写的UNIX/(GNU)Linux命令行工具,无GUI操作界面,需掌握其常用使用参数。二、Dmitry可以用来做什么? 1、进行TCP端口扫描,收集端口相…