IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:stack

共 4 篇相关文章

IT 累计浏览 9

如何在Hive SQL中构造临时表用于和其它的表做关联?

在Hive SQL处理数据关联时,针对少量uid-email映射数据,构造临时表是高效方案。本文介绍了两种主要方法:stack和union all。stack作为UDTF函数,能整齐生成二维映射,但必须通过lateral view展开以避免直接使用select列表导致的报错;而union all通过多次select拼接,兼容性强且易于手工增删。文章提供了完整代码示例,包括常见错误如stack报错及修正,并展示了如何与其它表进行join操作。此外,扩展讨论了不同规模ID关联的最佳实践:少量ID用IN子句,中等规模用stack或union all临时表,大规模或频繁复用则推荐上传文件或维护维表。这些方法优化了查询可读性和性能,适合数据工程师在临时分析或生产环境中参考。

IT 累计浏览 3,682

GDB 进行程序调试笔记

这篇笔记详细记录了从零开始使用 GDB 调试 C 程序的全过程。作者以一段包含循环累加的简单 C 代码为例,清晰地展示了调试前的必要准备——必须使用 `gcc -g` 参数编译,将源码信息嵌入二进制文件,这是所有调试操作的基础。 进入 GDB 后,文章没有罗列枯燥的命令列表,而是通过实操讲解了最核心的流程:用 `start` 启动程序,用 `list` 查看源码;在函数调用处,区分了 `next`(单步执行不进入函数)与 `step`(进入函数内部)的不同用途。当进入 `add_range` 函数后,通过 `backtrace` 查看函数调用栈帧,用 `info locals` 和 `print` 命令观察局部变量的状态,甚至演示了如何用 `set var` 在运行时修改变量值。最后,以一个命令表格收尾,汇总了 `bt`、`finish`、`frame` 等高频命令的用途。 它本质上是一份面向初学者的 GDB 速查手册,重点突出了调试过程中“查看”与“干预”程序状态的两大核心能力,对于不熟悉命令行调试的开发者来说,是非常实用的入门参考。

IT 累计浏览 2,198

C语言可变参数函数取参方法

这篇讲的是C语言中可变参数函数的具体取参方法。大家对 `printf` 这类函数很熟悉,它们允许传入不定数量的参数,但具体是如何在函数内部“逐个取出”这些参数的呢? 文章从 `...` 和 `` 头文件讲起,核心对比了 `va_list`、`va_start`、`va_arg`、`va_end` 这一套标准宏的使用流程。作者通过一个简单的“求和函数”示例,展示了如何声明可变参数、初始化参数列表指针,然后用循环和 `va_arg` 按类型逐个提取参数值。 除了标准方法,文章也提到了在非主流平台或特定编译器下可能存在的其它取参机制。关键差异在于:标准宏方法通过一个连续的参数栈来工作,类型信息在取参时需要手动指定,这既是它的灵活性,也是潜在的风险点——如果声明的类型与实际传入不符,就会导致未定义行为。 因此,文章也隐含了一个结论:可变参数函数非常灵活,但像 `printf` 那样需要根据第一个格式字符串来“理解”后续参数,这要求开发者对底层取参机制有清晰的认识,才能安全、正确地使用它。

IT 累计浏览 3,856

变量在内存中的位置

这篇讲的是程序运行时变量在内存中的具体栖身之所,帮你彻底搞懂数据在底层是如何安放的。 作者从进程的逻辑内存空间出发,清晰地划分了几个关键区域。全局变量、静态变量住在相对安稳的数据段;而通过 malloc 分配的内存则在堆区生长;最有趣的可能是栈,所有本地变量都在这里快速地分配与回收,文章特别点出“栈上的本地变量可能会是个随机数”,形象地解释了其内存值未经初始化的不确定状态。此外,代码段、共享库以及 mmap 映射的内存也各有其位。 理解这个内存地图,不仅能让你明白变量作用域和生命周期的物理基础,也能在排查野指针、内存泄漏等问题时,多一份定位的直觉。