You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于systemd sd-device源码中new宏语法的技术咨询

解析libsystemd中new(sd_device, 1)的用法

这行代码里的new不是标准C语言的关键字,而是systemd项目自定义的宏,用来简化内存分配操作。

具体作用

new(sd_device, 1) 等价于标准C的写法:

device = (sd_device*) malloc(sizeof(sd_device) * 1);

它封装了两个操作:

  • 自动计算1个sd_device结构体的内存占用大小
  • 调用malloc分配对应内存,并自动转换成sd_device*类型,省去手动写强制类型转换的步骤

为什么要这么写

systemd代码里大量使用这类自定义宏,核心目的是:

  • 减少重复代码:不用每次重复写sizeof和类型转换的冗余代码
  • 降低出错概率:避免因sizeof里的类型写错、转换类型不匹配导致的隐性问题
  • 统一代码风格:让内存分配的写法更简洁、一致

补充说明

systemd里还有配套的new0宏,new0(sd_device, 1)对应calloc,会把分配的内存初始化为0,也是项目里常见的内存分配方式。

内容的提问来源于stack exchange,提问作者DeltA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 23:24:52