runtime源码探究(二)strong的实现

本文深入探讨Objective-C runtime中的`objc_storeStrong`、`objc_retain`和`objc_release`函数,详细解析引用计数的增减过程,以及Tagged Pointer在内存管理中的应用。通过对源码的分析,揭示了对象引用计数存储的细节和优化策略。
摘要由CSDN通过智能技术生成

objc_storeStrong

oc中用strong修饰一个对象,实际上是调用了

void objc_storeStrong(id *location, id obj)

函数,location是引用对象的指针的地址,obj是对象本身。下面是该函数的完整实现:

void objc_storeStrong(id *location, id obj)
{
    id prev = *location;
    if (obj == prev) {
        return;
    }
    objc_retain(obj);
    *location = obj;
    objc_release(prev);
}

实现很简单,首先和之前的引用相比判断是不是同一个引用,是的话就return;否则的话就对obj对象进行retain,并且释放*location之前的引用(也就是说*location指针不再指向之前的对象,要把之前对象引用计数减1)。

objc_retain

objc_retain函数主要是对对象引用计数加1,下面来看objc_retain函数的实现。objc_retain函数调用了id objc_object::sidetable_retain()函数,该函数的实现如下:

id objc_object::sidetable_retain()
{
#if SUPPORT_NONPOINTER_ISA
    assert(!isa.nonpointer);
#endif
    SideTable& table = SideTables()[this];

    table.lock();
    size_t& refcntStorage = table.refcnts[this];
    if (! (refcntStorage & SIDE_TABLE_RC_PINNED)) {
        refcntStorage += SIDE_TABLE_RC_ONE;
    }
    table.unlock();

    return (id)this;
}

这个函数的实现也很简单,首先从SideTable中取出当前对象的引用计数信息refcntStorage,并且做了非负判断。再来看

 refcntStorage += SIDE_TABLE_RC_ONE;

这一行,SIDE_TABLE_RC_ONE的定义如下:


                
### 回答1: OpenPLC Runtime是一款基于C++编写的开放源代码的PLC软件。使用OpenPLC Runtime可以在各种不同操作系统上实现PLC程序的开发和运行,包括Windows、Linux和MacOS等系统。 OpenPLC Runtime源码是完全开放的,因此能够满足用户基于自己的应用需求对软件进行次开发。在对OpenPLC Runtime进行次开发时,用户可以自主选择不同的编程语言,从而实现更加灵活多样化的PLC应用程序。 OpenPLC Runtime源码拥有完备的文档和注释,方便用户理解和学习。此外,OpenPLC Runtime源码还被广泛应用于工业控制领域,如数控系统、机器人等。它不仅支持各种连接方式,如Modbus TCP/RTU,还支持多个PLC通讯协议,如S7,Modbus Slave和Ethernet/IP等通讯协议,有着灵活多变的运行模式。 总之,OpenPLC Runtime源码是一款优秀的PLC软件源码,能够充分满足用户的PLC开发需求,并为用户提供多种选择和应用场景。 ### 回答2: OpenPLC Runtime是一个开源的PLC运行时环境,采用C++编写,支持多种输入输出设备和通信协议,包括Modbus、Ethernet/IP、Profinet等。 OpenPLC Runtime源码可以在GitHub上找到,由OpenPLC项目团队维护。源码包含了PLC运行时的核心代码和对应的设备驱动程序。 在编译和安装OpenPLC Runtime之前,需要安装相应的开发工具和依赖库,包括编译器、make工具、Boost库、Libmodbus等。编译时需要指定目标设备类型和通信协议以生成相应的进制可执行文件。 OpenPLC Runtime支持多种编程语言和PLC编程软件,包括Ladder Logic、ST、C、Python等。用户可以根据自己的需求选择适合自己的编程语言和编程工具进行PLC编程。同时,OpenPLC Runtime还提供了Web界面和RESTful API以方便用户进行PLC程序的监控和控制。 总之,OpenPLC Runtime源码是一个强大的PLC运行时环境,为工业自动化控制系统提供了一个灵活、开放、可定制的解决方案。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值