08.01-block

一文读不懂 vllm的 /block_manager.py 主包在努力自救了……争取每天更新的第三天 欢迎学习vllm的朋友和主包多多交流。 阅读详情

1. block的本质

block是将函数及其执行上下文封装起来的对象

1. 基本使用
		int age = 10;
        void (^block)(void)=^{
            NSLog(@"----%d",age);
        };
        block();

2.转成.cpp文件
int age = 10;
        /*
        void (^block)(void)=^{
            NSLog(@"----%d",age);
        };
        */
        void (*block)(void)=((void (*)())&__main_block_impl_0((void *)__main_block_func_0, &__main_block_desc_0_DATA, age));
        
        /***block();****/
        ((void (*)(__block_impl *))((__block_impl *)block)->FuncPtr)((__block_impl *)block);
        /*
        //去掉类型转换
        int age = 10;
        void (*block)(void)=(
            &__main_block_impl_0
               (
                  __main_block_func_0,
                  &__main_block_desc_0_DATA,
                   age
               )
          );
        ((block)->FuncPtr)(block);
        */

由代码可以看出:

  1. 定义一个block,由 &__main_block_impl_0来完成,里面传入了3个参数
  2. 执行block : 用到了结构体block中的FuncPtr(函数指针)

3.block结构源码

结构体里的 __main_block_impl_0


  • __main_block_impl_0 : 定义一个block的时候会调用

age(_age) : 赋值 _age 赋值给age

struct __main_block_impl_0 {
 struct __block_impl impl; // 里面的FuncPtr : 方法的指针
 struct __main_block_desc_0* Desc;
 int age;//捕获的变量
 //自身的构造方法
 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int _age, int flags=0) : age(_age) {
   impl.isa = &_NSConcreteStackBlock;
   //block的类型 , 不太准,还是要以运行时所打印的类型来判断是哪种类型的block
   impl.Flags = flags;//默认
   impl.FuncPtr = fp;//block执行的代码块
   Desc = desc;//block结构体的描述
 }
};

  • 从构造方法来看,block
&__main_block_impl_0
               (
                  __main_block_func_0,
                  //void *fp,-- impl.FuncPtr = fp;
                  &__main_block_desc_0_DATA, 
                  //struct __main_block_desc_0 *desc -- Desc = desc;
                   age //int _age, -- age(_age)
               )

  • block要执行的代码块
  • _main_block_func_0
//((block)->FuncPtr)(block);
static void __main_block_func_0(struct __main_block_impl_0 *__cself) {
  int age = __cself->age; // bound by copy

            NSLog((NSString *)&__NSConstantStringImpl__var_folders_lq_l8g2c8kj16xbyccqs8h0tfyr0000gn_T_main_ab3ee1_mi_0,age);
        }

  • 执行block()
((void (*)(__block_impl *))((__block_impl *)block)->FuncPtr)((__block_impl *)block);
 //((block)->FuncPtr)(block); //简化代码
 //block->impl->FuncPtr // 过程

3. 总结

block就是一个结构体,里面有

  • isa : block的类
  • FuncPtr : block封装的代码块
  • 局部变量 : 如果用到了局部变量,就会捕获
  • 如果局部变量时对象 : block_desc里面会有copy和dispose方法
StableDiffusion进阶指南:LoRA Block Weight插件实战解析(分层控制与精准微调) 本文深入解析Stable Diffusion的LoRA Block Weight插件,详细介绍其分层控制与精准微调功能。通过实战案例展示如何解决多LoRA冲突、实现局部微调及突破提示词局限,提升AI绘画的精确控制能力。插件安装简单,支持动态权重调整和分步骤控制,是进阶用户的必备工具。 阅读详情

相关推荐

24C0x EEPROM跨页读写详解:以24C08为例突破256字节限制

I2C EEPROM是一种通过I2C总线进行读写操作的串行非易失性存储器,广泛应用于嵌入式系统存储参数、配置和日志。其工作原理基于I2C协议的主从通信,通过器件地址和内存地址访问存储单元。这类存储器的技术价值在于提供了简单、低引脚数的可靠数据存储方案。在应用场景上,它常见于各类单片机、FPGA和Linux嵌入式设备中。然而,当需要连续读写超过256字节的数据时,开发者常会遇到数据错乱的问题,其根源在于芯片内部的“页”结构限制。本文以24C08为例,深入剖析其10位寻址机制和页缓冲区原理,并给出完整的跨页读写

weixin_34054931的博客 418

AT24C08系列eeprom总结

1bytes(1个字节) = 8bit, 1block = 256bytes , 所以总共内存:8X256bytes = 2048bytes = 2kbytes= 16kbits,一个块 = 256bytes = 2kbit.1bytes(1个字节) = 8bit, 1block = 256bytes , 所以总共内存:4X256bytes = 1024bytes = 8kbits。A1和A0引脚未连接。AT24C08A,8K bits串行EEPROM:8K内部由4个256页的块组成,每个块4字节。

陌上花开缓缓归以的博客 2048

利用pyGAM实现广义可加模型(GAM)的实战指南

本文提供了利用pyGAM库实现广义可加模型(GAM)的完整实战指南。通过乳腺癌和房价预测案例,详细讲解了从环境配置、模型构建、核心可视化(部分依赖图)到参数调优(n_splines, lam)的每一步。重点展示了GAM如何平衡模型准确性与可解释性,帮助数据科学家在Python中高效应用这一强大工具。

weixin_29053383的博客 329

SAP MM学习笔记 - 豆知识06 - MM01/02如何增加附件,MIGO 发票校验之后的收货取消,XK05 供应商Block - 转记Block(冻结付款),购买Block(冻结采购)

本章讲了一些MM模块的豆知识。MM01/02如何增加附件,MIGO 发票校验之后的收货取消,XK05 供应商Block/解除Block。其中供应商Block又可以细分为 冻结付款,冻结采购两种。

shi_ly的专栏 2064

从零配置EtherCAT IGH主站:手把手教你处理内核版本与实时性优化的那些坑

本文详细指导如何从零配置EtherCAT IGH主站,涵盖内核版本适配、实时性优化及常见问题解决方案。通过精确匹配内核头文件、应用实时补丁和优化网卡驱动,帮助开发者实现微秒级响应,适用于工业自动化、机器人控制等高精度场景。

weixin_30790841的博客 382

【逆向实战入门】Lua Hook进阶:从函数拦截到流程控制的实战解析

本文深入解析Lua Hook技术的进阶应用,从基础函数拦截到复杂流程控制,提供实战技巧与避坑指南。通过保存原函数指针、条件性Hook及调用栈分析等高级方法,帮助开发者在游戏辅助、自动化工具等场景中精准控制程序行为,同时确保稳定性和反检测能力。

weixin_30613343的博客 331

GCD系列:代码块(dispatch_block)

dispatch_block 最显著的功能就是可以取消执行的代码块 基本函数 dispatch_block_t dispatch_block_create(dispatch_block_flags_t flags, dispatch_block_t block); void dispatch_block_perform(dispatch_block_flags_t flags,DISP...

anpengji9081的博客 405

从按键开机到I2C隔离:手把手拆解一个智能硬件项目里的MOS管实战配置

本文详细解析了智能硬件项目中MOS管的实战配置,从按键开机电路到I2C总线隔离,全面覆盖电源管理和信号隔离的关键技术。通过PMOS+NMOS组合方案实现可靠的开机功能,并采用双NMOS方案优化I2C通信隔离,提升系统稳定性和信号质量。

weixin_28691741的博客 326

详解段头block和位图block每个offset的含义(非完整版)

数据库中段头block损坏的恢复以及假如出现位图block损坏等的情况恢复, 如何在没有备份的情况下,那就是个灾难,如果表小还好办,我们可以通过基于rowid等方式去扫描把数据抽取cats 出来,或者你可以使用odu/dul等数据抽取工具。 遇到的一个case是有个表的段头坏了,但是 该表非常巨大,超过300g,在这种情况下,如果没有备份,处理起来就非常的麻烦了,虽然这样的情况很少见,但

809

通义千问语言模型Qwen2.5架构详解

此外,将基于API的模型 Qwen-Plus 与领先的专有和开源模型进行了对比,包括 GPT4-o、Claude-3.5-Sonnet、Llama-3.1-405B和DeepSeek-V2.5。Qwen2.5-Math-72B-Instruct的整体性能超越了Qwen2-Math-72B-Instruct和GPT4-o,甚至是非常小的专业模型如 Qwen2.5-Math-1.5B-Instruct也能在与大型语言模型的竞争中取得高度竞争力的表现。近来也出现了明显的转向小型语言模型(SLMs)的趋势。

搏博的专栏 1万+

一张图讲透银行个人外汇业务逻辑和实操

个人外汇业务主要分为结售汇和外币兑换两类,前者满足日常跨境需求,后者因投机属性多数银行已暂停。业务核心是利用汇率波动实现货币兑换,满足支付或投资需求。交易涉及客户分类、主流币种、多种渠道和汇率计算规则,需区分直接/间接标价法判断汇率走势。银行通过"货币兑换"科目核算损益,采用期末折算确认盈亏。监管要求包括5万美元年度额度、合法渠道、真实性原则及大额申报等。随着跨境金融数字化发展,掌握基础逻辑和合规要求是安全参与外汇业务的关键。

银行信息系统应用架构详解 289

关于block中数据的存储和重组的探究

前言: 在block内部oracle的数据到底是怎么存储的,通过rowid方式的时候又是怎样的,insert/delete/update发生的时候又是怎样的,想仔细探讨一下 先交代block里面数据的基本结构: SQL> create table tn(a number, b varchar2(1000)); Table created. SQL> insert into tn select ro

biti_rainy的专栏 2225

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

inline-block 属性分析

inline-block 属性分析2010-03-23摘錄:http://www.keakon.net/2009/11/21/inline-block%E7%9A%84%E4%BD%BF%E7%94%A8%E5%8F%8Abugie6,ie7的haslayout属性是个让人头疼的问题。在做导航条的时候,一般会用到ul li结构,大多数时候我们是把li设置为浮动,让其并排显示在同一行

ShulingLiu的专栏 854

matlab处理las点云(1)——las/laz格式解析【2024最新版】

matlab中的las/laz格式解析。博客长期更新,本文最近一次更新时间为:2024年11月9日。

点云侠的博客 8460

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

由ASIHttpRequest里的block引发的思考

项目发http请求,现在一般的都是用的第三方开源库,当然发异步请求时我们也会写几个回调函数来进行请求返回时的处理。不过前段时间看一个朋友写的代码,里面很用block简单的实现了回调相关的部分。比如: 01 self.request=[ASIHTTPRequest requestWithURL:[NSURL URLWithString:url]]; ...

106

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

oracle数据文件内部BLOCK结构详解

oracle数据文件内部BLOCK结构详解datafile block block size :8192 Offset 0 1 2 3 4 5

CathySun118的专栏 2660

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

GCD全解-09-dispatch_block-GCD取消操作

为什么要学dispatch_block? dispatch_block_create创建 demo 监听 block 执行结束 dispatch_block_notify GCD的取消:dispatch_block_cancel 为什么要学dispatch_block? 在向队列中添加任务时,可以直接在对应的函数中添加 block。但是如果想对任务进行操作,比如监听任务、取消任务,就...

zhuge1127的博客 2651

定位block块位置

异常 Caused by: org.apache.hadoop.hdfs.CannotObtainBlockLengthException: Cannot obtain block length for LocatedBlock{BP-215372827-172.23.30.41-1598540639502:blk_1112686982_38963124; getBlockSize()=101167104; corrupt=false; offset=0; locs=[DatanodeInfoWith.

一亿年开发经验 936

inline-block

http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/ CSS display: inline-Block: Why It Rocks, And Why It Sucks Published on Wednesday, February 24, 2

WolfMan_SunnyWolf的专栏 725

CoAP 块传输实战:解决大尺寸传感器数据传输的 Block1 与 Block2 配置

通过合理配置 Block1/Block2 参数,可在保证可靠性的前提下,实现 $>10\text{KB}$ 传感器数据的高效传输。:在 $6\text{LoWPAN}$ 网络中,建议将块大小设置为 $60-80$ 字节以适应链路层分片机制。{\text{块大小指数}} \mid \underbrace{\text{M}}在受限网络环境(如物联网)中传输大尺寸传感器数据时,CoAP 协议的。

yhgjhjfhkjkl的博客 480

C-04. 同步分层:warp / block / grid 的代价、可见性与 cooperative launch

本文通过微基准测试对比了CUDA中不同层级的同步原语性能,发现主要性能断层出现在grid与block之间(约17倍差距),而非传统认为的warp与block之间(仅1.1-1.23倍)。关键结论包括: 跨SM同步(grid)代价显著高于SM内部同步(block); warp同步(__syncwarp)并非免费,不能替代block同步; grid同步需配合cooperative launch使用,其延迟随每SM block数增加而显著上升; 在保持状态复用的场景下,单核grid同步与双kernel方案耗时相当

YPeng_Gao的博客 426

oracle数据文件内部BLOCK结构详解(zt)

oracle数据文件内部BLOCK结构详解http://www.sosdb.com/article/datafile_block.htm[@more@]datafile block block size :8192Offset ...

clke32966的博客 363
上一篇: 06. 03 +initialize方法
下一篇: 08.02-block变量捕获
淡暗云之遥
博客等级 码龄15年 61粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值