【底层重构】C语言100篇:从入门到天花板 第34篇 动态内存管理:malloc/calloc/realloc/free 详解

23 中望CAD二次开发(ZRX C++)-自定义实体(二) 本文详细介绍了自定义图形实体,如何实现几何变换、捕捉、节点编辑,并介绍了CAD代理的概念。 阅读详情

【底层重构】C语言100篇:从入门到天花板 第34篇 动态内存管理:malloc/calloc/realloc/free 详解

作者:华夏之光永存
专栏定位:从零起步,直击C语言底层本质,覆盖基础到内核级开发,100篇完整体系化教学


前言

本篇是第二阶段进阶核心第34篇,是C语言内存管理的分水岭。
如果说数组是“静态分配”,那动态内存就是“可控的生命周期”。在C语言中,栈内存大小固定、生命周期与函数绑定,而堆内存通过四大函数实现了“按需申请、灵活调整、手动释放”,是实现动态数组、链表、树、大型数据结构的唯一途径。

很多初学者对动态内存的恐惧,源于“内存泄漏、野指针、段错误”。本篇不绕弯子,直接从底层原理、四大函数、核心区别、实战避坑四个维度,把动态内存讲得明明白白,确保你既能用对,也能避坑。

学完本篇,你将彻底掌握堆内存申请与释放的底层逻辑,能精准区分malloc/calloc/realloc的适用场景,杜绝内存泄漏与野指针,为后续链表与高阶数据结构打下坚实基础。


一、底层重构:C语言内存全景与堆的地位

在写代码前,必须先理清C程序的内存布局,这是理解动态内存的前提:

  1. 栈区 (Stack):

    • 特点:自动分配、自动释放。
    • 存放:局部变量、函数参数、返回地址。
    • 限制:空间小(通常几MB),大小固定,函数结束变量消失。
    • 痛点:无法在函数外部长期持有数据,无法定义大小可变的数组。
  2. 堆区 (Heap):

    • 特点:手动申请、手动释放。
    • 存放:通过malloc/calloc/realloc申请的内存。
    • 优势:空间大(可达GB级),生命周期自由,直到free或程序结束。
    • 核心:本篇要讲的四大函数,就是操作堆的工具。

核心结论:当数据大小不确定、需要长期持有、或数据量巨大时,必须使用堆内存。


二、四大核心函数深度拆解

1. malloc:从堆中分配一块内存

底层逻辑:
在堆中寻找一块连续的、未被占用的内存块,返回其起始地址。如果找不到,则返回NULL。
它不会初始化内存,里面是随机的垃圾值。

函数原型:
void *malloc(size_t size);

参数:size 是需要分配的字节数。
返回值:void* 通用指针,需强制转换为对应类型。

实战写法:

// 申请4个int大小的空间(4*4=16字节)
int *p = (int *)malloc(4 * sizeof(int));
if (p == NULL) {
    printf("内存申请失败\n");
    exit(1); // 或处理错误
}
// 使用内存
p[0] = 10;

要点:

  • 必做校验:malloc失败会返回NULL,必须校验,否则解引用NULL会直接崩溃。
  • 类型转换:void*不能直接赋值,必须强转。

2. calloc:为数组分配内存并初始化

底层逻辑:
专为数组设计。它会把申请到的内存全部初始化为0。
相比malloc,它多了一步初始化操作,省去了手动memset的步骤。

函数原型:
void *calloc(size_t nitems, size_t size);

参数:

  • nitems:元素个数。
  • size:每个元素的大小。

实战写法:

// 申请5个int,共5*4=20字节,并全部初始化为0
int *p = (int *)calloc(5, sizeof(int));
// p[0]-p[4] 全是 0

3. realloc:调整已分配内存的大小

底层逻辑:
这是动态内存的灵魂。它可以改变已经通过malloc/calloc申请的内存块大小。
它会尝试在原位置扩容:

  • 成功:返回原指针地址,原数据保留。
  • 失败:返回NULL,原内存块依然有效,数据未被破坏。

函数原型:
void *realloc(void *ptr, size_t size);

参数:

  • ptr:需要调整的内存指针(不能是NULL,除非是新申请)。
  • size:新的总大小。

实战写法(动态数组扩容):

int len = 4;
int *p = (int *)malloc(len * sizeof(int));

// 想扩容到8个元素
int *new_p = (int *)realloc(p, 8 * sizeof(int));
if (new_p != NULL) {
    p = new_p; // 只有成功才更新指针
    len = 8;
}

关键点:

  • 不要直接赋值给原指针:p = realloc(p, new_size); 如果失败,p变成NULL,原内存就泄漏了。必须用临时指针。
  • 数据保留:扩容时,原数据会被保留。缩容时,超出部分的数据会被截断。

4. free:释放堆内存

底层逻辑:
把之前申请的堆内存归还给操作系统,使其可被再次利用。
它不会修改指针本身,指针依然指向那块内存地址,但该地址的内容已经变成“垃圾”,变成了野指针。

函数原型:
void free(void *ptr);

实战写法:

free(p); // 释放内存
p = NULL; // 关键一步:防止野指针

核心原则:

  • 成对出现:malloc/calloc/realloc 必须与 free 成对,否则造成内存泄漏。
  • 不可重复释放:对同一块内存free两次,程序崩溃。
  • 释放后置空:free(p)后,p变成野指针,立即赋值NULL是好习惯。

三、三大函数核心区别(面试必问)

特性malloccallocrealloc
功能分配内存分配内存并初始化为0调整已分配内存大小
参数总字节数元素个数 + 元素大小原指针 + 新总大小
初始化不初始化(垃圾值)初始化为0无(保留原数据)
效率最高稍低(多了初始化步骤)中等(涉及内存拷贝)
典型场景已知数据无需初始化数组、需要清零的场景动态数组扩容、动态缓冲

四、动态内存的“生死”全流程(实战案例)

下面是一个完整的动态数组示例,涵盖了申请、使用、扩容、释放全流程,这是企业开发中最标准的写法。

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 1. 初始申请
    int capacity = 2;
    int *arr = (int *)malloc(capacity * sizeof(int));
    if (arr == NULL) return 1;

    // 2. 存入数据
    arr[0] = 10;
    arr[1] = 20;
    printf("存入数据: %d, %d\n", arr[0], arr[1]);

    // 3. 动态扩容(需要存更多数据)
    int new_capacity = 5;
    int *temp = (int *)realloc(arr, new_capacity * sizeof(int));
    if (temp == NULL) {
        printf("扩容失败,原数据保留\n");
    } else {
        arr = temp;
        capacity = new_capacity;
        // 扩容后新增的元素是垃圾值,需手动初始化
        arr[2] = 30;
        arr[3] = 40;
        arr[4] = 50;
    }

    // 4. 遍历输出
    for (int i=0; i<capacity; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 5. 最终释放
    free(arr);
    arr = NULL; // 避免野指针
    return 0;
}

五、高频错误与“必死”陷阱(避坑指南)

  1. 忘记检查NULL

    • 后果:malloc失败返回NULL,后续*p = 10直接导致程序崩溃。
    • 规范:每次申请后,必须if (p == NULL) return/exit;。
  2. 内存泄漏 (Memory Leak)

    • 定义:malloc了内存,但最后没有free,程序结束前这块内存一直被占用。
    • 后果:长期运行的程序(如服务器、嵌入式守护进程)会越跑内存占用越高,最终OOM(内存溢出)崩溃。
    • 原则:malloc在哪里,free就在哪里(或由明确的释放机制负责)。
  3. 野指针 (Wild Pointer)

    • 情况A:free(p)后,p没置NULL,继续使用。
    • 情况B:返回了局部变量的地址(栈内存)给外部。
    • 后果:访问随机内存,程序行为不可预测(崩溃、乱码)。
    • 规范:free后必须p = NULL;函数不要返回栈变量地址。
  4. 重复释放

    • 代码:free(p); free(p);
    • 后果:程序崩溃。
    • 规范:free后指针置NULL,再次free(NULL)是安全的。
  5. 越界访问

    • 代码:int *p = malloc(4*sizeof(int)); p[4] = 100;
    • 后果:堆溢出,可能破坏堆结构,导致后续malloc/free失败。

六、企业级编码规范

  1. 申请即校验:所有malloc/calloc/realloc后,必须紧跟NULL校验。
  2. 成对设计:封装动态数据结构(如动态数组)时,init函数负责malloc,destroy函数负责free,责任分明。
  3. 扩容用临时指针:realloc必须使用临时变量接收返回值,避免失败导致原指针丢失。
  4. 释放后置空:free(ptr)后,ptr = NULL;。
  5. 避免返回栈地址:函数内定义的局部变量(栈上),不能作为返回值。

本篇核心总结

  1. 堆内存是C语言动态扩展的基石,解决了栈空间小、生命周期固定的问题。
  2. malloc 是最基础的分配器,不初始化,需手动校验。
  3. calloc 专为数组设计,自动清零,减少代码量。
  4. realloc 是动态调整的神器,扩容保数据,失败不影响原数据。
  5. free 是归还内存的唯一途径,必须成对,释放后务必置空。
  6. 核心原则:不泄漏、不越界、不空指针、不重复释放。

掌握了本篇,你就掌握了C语言从“玩具代码”到“工业级程序”的核心能力。链表、树、哈希表等复杂数据结构,都将基于动态内存构建。

课后实战作业

  1. 使用calloc创建一个大小为10的浮点数组,并初始化为0.0,然后遍历输出。
  2. 编写一个动态数组append函数:接收数组指针、当前容量、新元素,自动扩容(容量翻倍),并将元素添加到末尾。
  3. 模拟一次realloc失败的场景,验证原指针是否有效、数据是否保留。

下期预告

第35篇 内存泄漏与越界:动态内存常见错误与规避,将结合Valgrind工具与实战案例,深度剖析内存泄漏的定位方法与缓冲区溢出的防御机制,敬请期待!

专栏关注钩子

本专栏《C语言100篇:从入门到天花板》全程底层重构,体系化覆盖C语言基础到天花板级知识点,内容贴合企业实战、面试考点,配套源码、题库持续更新。关注作者华夏之光永存,第一时间获取更新,带你吃透C语言,从小白进阶到底层开发大神!

Outlook Express 6 (OE6) for Win7/Win8/Win10 英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。 立即下载

相关推荐

从零到一:Quartus II连接开发板实战,打通绘图、管脚分配、编译与下载全链路

本文详细介绍了使用Quartus II软件连接FPGA开发板并完成首个项目的全流程。从硬件连接到驱动安装,到绘制电路框图、精准分配管脚,再到编译设置与最终下载,手把手指导您打通从设计到硬件实现的完整链路,是FPGA初学者的实战入门指南。

mqtt6iot的博客 717

30天C语言从零到项目实战:掌握编程核心,开启系统开发之路

编程语言是计算机科学的基础工具,其核心在于理解计算机如何执行指令和处理数据。C语言作为一门中级语言,兼具高级语言的结构化特性和接近硬件的控制能力,通过指针和内存管理等机制,让开发者能够深入理解程序在计算机底层的运行原理。这种对底层机制的掌握,为学习操作系统、编译原理等核心课程奠定了坚实基础,并在系统软件、嵌入式开发、高性能计算等领域具有不可替代的技术价值。本文围绕C语言学习路径,结合指针和内存管理等热词,提供一套从语法基础到项目实战的30天系统训练方案,帮助初学者构建扎实的编程思维和工程实践能力。

weixin_34389926的博客 354

VS2019集成AddressSanitizer:C++内存错误检测实战指南

在C++开发中,内存管理是核心挑战之一,涉及堆、栈和全局变量的分配与释放。其原理在于程序运行时对内存地址的访问必须严格遵循分配边界和生命周期规则,否则会导致缓冲区溢出、释放后使用等严重错误。这类问题的技术价值在于直接影响程序的稳定性、安全性和性能,是高质量软件必须攻克的基础难题。应用场景广泛,从嵌入式系统到大型服务器软件,都需要可靠的内存错误检测机制。AddressSanitizer(ASan)作为一种编译时插桩技术,通过影子内存和运行时检查,能精准定位堆缓冲区溢出、释放后使用等隐蔽错误。本文以Visual

weixin_34356310的博客 279

从一到无穷大 #108:Meta 的 AI 存储架构——BLOB 重构与跨地域数据加载

在 Meta 的旧 BLOB 服务里,数据已经放到闪存上,一次请求中的多层元数据查询仍可能耗费数百毫秒,部分请求还要跨地域。底层介质变快以后,上层存储服务的查找和转发开销开始直接影响 GPU 利用率。[1]另一种等待发生在训练之前。GPU 分散在不同地域,研究者要先找到有算力的地方,再把训练数据搬过去。一次小规模实验也可能先花几个小时导入数据,调整数据后再等一轮。Meta 保留了底层 Tectonic,改造了它上面的 BLOB 访问路径。

李兆龙的博客 484

从“看不懂Sansen”到亲手搭建:一个Class AB输出级+浮动电压源的保姆级设计复盘

本文详细记录了从理论困惑到实践突破的Class AB输出级与浮动电压源设计全过程。通过电流镜调试、恒定跨导优化及版图匹配等关键步骤,作者实现了高性能运放设计,并分享了从仿真到实测的宝贵经验,为模拟电路初学者提供实用指导。

weixin_33737774的博客 867

SAP物料分类账(ML)避坑指南:激活顺序错了怎么办?从CKMSTART到差异分摊的完整流程

本文详细解析SAP物料分类账(ML)的正确激活顺序与配置流程,帮助用户避免常见陷阱如'LKW无科目'、'在制品重估失败'等问题。从CKMSTART到差异分摊的完整流程,涵盖关键配置节点、典型报错分析与应急处理方案,确保产品成本控制(CO-PC)模块的顺利运行。

weixin_42524708的博客 258

CPO重构光互联,传统可插拔光模块厂商重新定位产业分工

AI集群网络功耗制约数据中心发展,推动光互联技术加速演进。CPO通过将光引擎集成至芯片旁,大幅降低电路径功耗,单比特功耗可降至6pJ/bit。尽管形态变化,光引擎功能未消失,仍由光模块厂主导供应,产品转向NPO与CPO。平台主导权上移至芯片厂商,认证周期长、黏性强,价值量向硅光、激光器等上游器件集中。2027年起订单放量,关键瓶颈在光器件产能与良率,客户认证与外置光源量产成产业化核心指标。

张星河的博客 474

基于RK3588与Gstreamer的端侧实时视频流AI推理系统构建

本文详细介绍了基于RK3588芯片与Gstreamer框架构建端侧实时视频流AI推理系统的完整方案。通过硬件选型、环境配置、OpenCV编译优化、视频流处理实战及模型部署等关键环节的深入解析,展示了如何利用RK3588的6TOPS NPU算力与Gstreamer的低延迟特性,实现工业质检、智能交通等场景下的高效边缘计算。特别针对RTSP推拉流优化、RKNN模型转换等核心技术难点提供了实用解决方案。

weixin_30516243的博客 381

横琴×大湾区GEO规范共建计划正式启动:以“透明度量”重构跨境品牌信任新基建副标题:立足珠澳·辐射湾区——三方签约打造“可信GEO”全要素生态闭环

这套组合的稀缺性,还在于它不是把几家公司的业务简单并列,而是围绕“可信GEO”形成一条可运转的服务链:真实贸易与本地消费场景提供应用土壤,海外社媒矩阵与跨境数据合规提供传播与确权能力,GEO落地服务提供从诊断到复盘的可交付执行,开放监测底座提供不依附于执行方的效果校验,澳门主流报业协同资源则把本地公信力、公共议题与社会认知入口前置到共建过程中。至此,中智云的真实贸易场景、麦芽科技的跨境传播网络、横琴必优的底层度量技术,以及澳门主流报业协同资源提供的本地公信力与公共议题入口,完成了四块关键拼图的严丝合缝。

web15185420056的博客 247

注册GitHub时出现Unable to verify your captcha response.Please visit https://docs.github.com/解决方案(持续更新)

本文主要介绍了注册GitHub时出现Unable to verify your captcha response. Please visit https://docs.github.com/articles/troubleshooting-connectivity-problems/#troubleshooting-the-captcha for troubleshooting information.解决方案,希望能对学习使用GitHub的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

国内数据分类分级平台分析:大模型赋能下的技术能力重构分析

数据分类分级平台正经历从 "规则扫描器" 到 "智能数据资产理解引擎" 的跃迁。大模型重构的不只是识别准确率,而是把过去依赖专家经验的语义理解、定级判断、标签维护,变成可规模化、可私有化、可持续学习的平台能力。但这并不意味着人被替代 —— 行业分级标准的把握、误分级的风险承担、业务部门的协同推进,仍然需要专业服务团队深度参与。

KKKlucifer的博客 294

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比

21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比 系列定位 :《MySQL 数据库全栈运维实战系列》第 21 篇,与《Oracle 数据库全栈运维实战系列(VMware 版)》同构对标。 适用版本 :MySQL 8.0(5.7 差异随文标注)。 官方文档 :MySQL…

dk843108982的博客 247

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【字节拥抱开源】Cola2:用连续隐变量重构语言模型,346B Token 跑出 60.10 八任务均分

Cola2 是一款基于连续隐变量的自适应语言模型,通过动态语义压缩与块因果扩散 Transformer(DiT)实现高效生成。它在346.03B token上训练,八项评测平均得分60.10,性能超越部分更大规模模型。其核心创新在于联合优化隐变量压缩与离散解码,支持受控扩展与稳定推理。项目提供完整权重、工具链及评测数据,适用于研究与应用。

weixin_41446370的博客 287

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

视觉Transformer的“第二次革命”:ViT³如何用测试时训练重构注意力范式

ViT³提出视觉Transformer的“第二次革命”,通过测试时训练(TTT)重构注意力范式,以线性复杂度实现高精度建模。其核心思想是将注意力视为用上下文构建内部模型,而非简单加权求和。研究总结六条设计原则,如采用MSE损失、全Batch单轮训练、卷积内部结构等,构建纯TTT架构,在1248×1248图像上显存降低90.3%,速度提升4.6倍,性能超越线性注意力与Mamba,推动高效高分辨率视觉计算发展。

weixin_46846685的博客 334

空圈容错 · 地震预警与抗震工程全域综合诊断与重构方案

本文基于空圈容错理论,把韧性工程方法引入地震预警与抗震工程领域,建立C‑M‑P三层拓扑、R病理探针、D_max尾部承载力、∅_safe可控降级分析体系。剖析五大架构裂缝,指出当前防灾系统存在高均值、低尾部容错缺陷:常态指标表现良好,但在台站损毁、断网断电等极端工况下易发生系统雪崩。 结合震例对照,提出止血‑兜底‑拆假异构‑守界四阶段重构路径,配套预警链路、城市抗震工程两套可证伪验收清单。本文仅作为系统架构诊断工具,不攻克短临预报世界性难题,区分推演示例与真实震例,主动披露未验证项与组织阻力,为城市地震韧

Liaiyang66的博客 331

从 ArkUI V1 监听泥沼到 V2 精准更新的性能跳跃,重构状态数据流

起初以为只是简单的 API 替换,没想到在一次复杂表单交互中,整个页面出现了严重的掉帧与输入延迟。为了过渡,我试图在一个 V2 的父组件里,塞入一个原本用 V1 编写的子组件。这也是为什么在重构中,我强制团队在涉及数组更新时,必须通过封装好的工具方法来操作。必须精确到需要更新的最底层属性,如果只用在外层对象上,内层的频繁变动依然无法触发 UI 的刷新。变化时,框架能够直接定位到绑定该变量的 UI 节点进行刷新,完全没有多余的遍历。用性能分析工具跑一下,体会一下消除深度代理后,页面渲染性能的直线拉升。

2602_97267507的博客 288

中烟创新×某电力公司 | AI大模型重构电力合规反事故演习

更进一步,查阅任何一项内部制度时,“制度优化建议智能体”会自动将制度全文与上位法、行业规范比对,识别条款滞后、内容冲突、管控缺失——制度治理从“定期运动式检查”,变成“随时在线、持续体检”。权重可按岗位、业务重点、风险等级灵活配置,最终生成可视化画像与等级评定(优秀、良好、合格、待改进)——合规管理从“模糊感知”走向“精准画像”,“印象分”让位于“数据分”。让确定性的任务走确定性的路,让需要“想”的任务交给会“想”的模型——“大模型+小模型”协同,不是技术的折中,而是工程的最优。沉淀下来的经验,不会。

ZYCX_0517的博客 381

中控屏退位,AR-HUD上位?L3重构座舱交互底层逻辑

小鹏旗下G7、X9搭载自研图灵AI芯片与AI BOX,采用端侧推理为主、云端协同为辅的架构,配备追光全景AR HUD,将VLM视觉大模型识别出的障碍物、鬼探头风险、车道引导、智驾决策结论,直接锚定叠加在真实路面之上,并完成实景虚实贴合验证。值得注意的是,安全预警和商业推荐共享同一块AR视野,如果视觉层级、出场顺序没有清晰隔离,驾驶员很容易混淆“必须响应的风险”和“可选的 AI 推荐”,一旦发生事故,会带来责任认定的争议。总体来看,中控屏让位、AR-HUD站上交互前台,本质是L3对人机安全交互规则的重塑。

高工智能汽车 214

Hvigor 流水线与包体积极限瘦身重构

那些没有被代码引用的废弃图片、甚至是一些未使用的三方库组件,在编译时被识别出来并自动踢出了安装包。这里必须注意,开启混淆后,要仔细检查实体类的序列化代码,必要时在。配合主模块的依赖声明,在打包时,这部分代码就不会被打进基础安装包,而是等用户真正点击短视频入口时,系统再动态下发。审查项目结构时,我吓了一跳:原本只给 10% 用户使用的短视频模块,居然占了 40MB 的空间,而且和主业务紧紧耦合在 Entry 模块里。没有被包含进来的小语种资源文件,在编译阶段会被彻底剔除,避免无意义的体积浪费。

2602_97267507的博客 287

产教融合从“深水区“走向“未来实训中心“:AI+XR重构智慧养老人才培养链条

老龄化加剧催生养老人才缺口,传统实训受限于场景、设备与资源。南京恒点依托AI+XR技术,打造智慧实训室,通过虚拟仿真、沉浸体验、虚实结合与智能评价,破解“场景难进、设备难用、资源难融”三大难题,实现评估能力标准化培养。以《老年人能力评估规范》为标尺,构建可复制、可持续的产教融合新范式,推动职业教育从“有”到“优”,助力养老专业迈向高质量发展。

恒点虚拟仿真官方博客 332

工业球磨机节能改造与智能磨矿:矿物加工场景下的能效竞争逻辑重构

2026年2月,全球首台3.55MW磨机专用低速永磁环形电机下线,摒弃减速机、离合器与大小齿轮组,将电机转子与磨机滚筒一体化安装,实现“无齿轮、无接触”直接驱动,节能效果达10%至30%,单台设备年省电费数百万元。中信重工在中色抚顺红透山矿业部署的“半自磨机+球磨机+智能磨矿系统”方案,配套矿石粒度分析仪、衬板磨损在线检测与磨矿介质智能添加系统,实现数据驱动替代人工经验调控,处理量提升15%以上,单位能耗降低7%以上;的实质并非单一设备的自动化,而是将磨机从孤立的主机转变为感知—决策—执行的闭环节点,使。

2601_96585642的博客 188

AI重构工业软件|泛联新安亮相第四届工业软件创新发展学术会议

两天会议,从院士报告里的战略判断,到灯塔工厂的实战复盘,再到泛联新安总部的体系拆解,其实都在回答同一个问题:AI重构工业软件,怎么从“演示可用”走到“生产敢用”。没有合理的裁判体系为AI任务结果进行验收,人类工程师的精力最终会疲于为AI产出做确认和兜底。工业软件和关键装备行业的AI转型,缺的从来不是模型,而是让模型可以被信任的那套工程体系。这也是唐勇博士在主论坛报告里反复强调的结论。这个问题没有一次性答案,我们会持续把可信智能体的工程实践公开出来。

flxa19310090839的博客 47

编队系列(三)|固定翼编队避碰架构:行为融合+人工势场+队形重构

行为法把固定翼编队任务拆成路径跟踪、队形保持、速度协调、机间分离和障碍物避让等局部控制项,人工势场可以为分离与避障提供计算量较低的虚拟运动向量。但简单加权求和不能消除局部极小、向量抵消、指令跳变和安全阈值失效问题。合成向量进入固定翼前,还必须经过航迹角变化率、滚转角、速度范围和前向预警距离约束。当障碍通道无法容纳原始队形时,提前将槽位平滑重构为横向压缩、纵向错列、分组或高度分层形式,可以减少局部避让与刚性队形保持之间的直接冲突。

2302_80148937的博客 322

【鸿蒙心迹】折叠屏适配实战——展开/折叠状态下的 UI 重构(HarmonyOS 7.x)

折叠屏展开那一刻,布局不是"被放大",而是被重构——单栏切双栏、列表变分栏、顶部 Tab 变侧边导航。本文用邮件类应用适配折叠屏的真实过程为案例,讲清展开/折叠状态监听、双栏重构、半折叠悬停态处理,以及最容易被忽略的一件事:状态在布局重建后不能丢。附 5 个真实踩坑(现象→根因→解决→教训)与自查清单。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 371

《重构汽车软件基础设施》白皮书核心解读 AUTOSAR、CAPI与AI定义汽车的产业变革

中国汽车工程学会给出了AI上车的三阶段判断:AI in Car(2025年左右,点状赋能,主导权仍在人)→ AI Car(2030年左右,车成为AI驱动的"具身智能体")→ Car in AI(2035年左右,车成为AI生态的"终端节点")。钱和人投进去了,上层应用创新却"贫血"了。普华基础软件:针对"AI跑得太快(月迭代)、认证跑得太慢(ASIL-D认证一两年)"的节奏错配,给出"第四象限"解法——解耦优先:安全与AI拆开(底层安全模块一次性认证不动,上层AI随便迭代)、OS跟芯片拆开、算法跟OS拆开。

m0_72216366的博客 314
上一篇: 【底层重构】C语言100篇:从入门到天花板 第33篇 指针与结构体:指针访问结构体与动态分配
下一篇: 【底层重构】C语言100篇:从入门到天花板 第35篇 内存泄漏与越界:动态内存常见错误与规避
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值