美文网首页
面向对象编程与面向数据编程

面向对象编程与面向数据编程

作者: 谭英智 | 来源:发表于2023-10-23 21:57 被阅读0次

背景

C++的设计具备面向对象的思想

通过面向对象的抽象,可以很好解耦和扩展。

然而对于某些高性能设计,面向对象并不是很好的设计

而面向数据的思想在某种程度,解决了高性能的问题。

场景

面向对象设计

  • 类定义

    class Point {
        int x;
        int y;
    };
    
  • 使用场景

    std::vector<Point> arr;
    int z = 0;
    for(auto& p: arr) {
        z += p.x;
    }
    
  • 变量arr的内存分布如下

    | x | y | x | y | x | y | x | y | x | y | x | y |
    

    由于对象Point使用时,是累加成员x,在数据的内存分布来看,每次访问下一个x,都需要在内存中跳过y,导致CPU cache的数据有一半是浪费的。

    这让人思考是否面向对象的设计适合这种场景

面向数据设计

  • 数据定义

    class PointContainer {
      std::vector<int> x_arr;
      std::vector<int> y_arr;
    };
    
  • 使用

    PointContainer p;
    int z = 0;
    for(auto& x: p.x_arr) {
      z += x;
    }
    
  • 内存分布

    | x | x | x | x | x | x | x | x | x | x | x |
    

    通过面向数据思想的改造,x的内存分布是紧密的,这样在计算 z 的时候,CPU cache的利用率就可以非常高

相关文章

  • 面向对象_初识

    目录 面向对象编程介绍 类与对象介绍 私有属性与私有方法 面向对象编程 1. 面向对象编程介绍 面向对象编程:Ob...

  • 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

    什么是面向过程编程与面向过程编程语言?面向对象编程相比面向过程编程有哪些优势?为什么说面向对象编程语言比面向过程编...

  • 面向对象01-面向对象编程

    面向过程与面向对象 01 面向对象编程和面向过程编程是一种编程思想,和具体的语言关系不大。 02 面向过程编程和面...

  • Python基础之面向对象编程(二)

    本篇文章主要介绍面向对象编程。 面向对象编程 几个定义 面向过程编程:围绕函数,编写能处理数据的代码块的编程方式。...

  • pyqt5教程(二)一个简单的应用图标

    一、面向对象编程 PyQt5编程意味着就是面向对象的编程。在面向对象编程中有三个重要的东西,分别是类,数据和方法,...

  • 第十章 对象和类(1)过程性编程和面向对象的编程

    (一)过程性编程和面向对象的编程 OOP,也就是面向对象的编程,与传统的面向过程的编程的差异是明显的,面向过程的...

  • JS之面向对象

    什么是面向对象? 面向对象是一种编程思想,是在面向过程编程(结构化编程)之后出现的,面向对象的思想基于抽象数据类型...

  • Swift和OC的区别

    一、编程范式 Swift可以面向协议编程、面向函数编程、面向对象编程。 OC主要是面向对象编程。 二、类型安全 S...

  • 谈谈面向对象编程

    何为面向对象编程 面向对象编程简介 面向对象编程(Object-oriented Programming,缩写:O...

  • python-day14

    一、面向对象编程 编程思想:1.面向对象编程 --> 算法,逻辑2.函数式编程 --> 函数3.面向对象编程 ...

网友评论

      本文标题:面向对象编程与面向数据编程

      本文链接:https://www.haomeiwen.com/subject/twvjidtx.html