您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > C/C++/C#

UNIX 平台 C 程序开发心得

时间:2022-02-21 13:44:37  来源:  作者:顽石内蕴金

1. limit

1 . 1 基本知识 查看 UNIX 操作系统资源限制 [HP-BILLFEE]limit cputime unlimited filesize unlimited datasize 1048576 kbytes stacksize 8192 kbytes coredumpsize 2097151 kbytes descriptors 2048 files memoryuse unlimited cputime: filesize: datasize: stacksize: coredumpsize: descriptors: memoryuse:

1 . 2 跟 l i mit 相关的注意事项 a. 通过 limit 限定的是某个用户对资源占用的软限制;在内核中, 有关于上述参 数的硬限制, 是针对所有用户而言的。 软限制无法超过硬限制。 b. 针对文件处理程序, 打开文件句柄后, 如果在异常处理环节忘记将文件句柄 关闭, 那么程序占用的文件句柄数就会越来越多。 当超过 descriptors 数量之 后, 就会出现无法打开文件的错误。 c. descriptors 不光是指文件句柄,还包括: socket 句柄等。当 socket 连接建立后, 如果没有正常的将 socket 连接关闭。 那么程序占用的 descriptors 数量也会超 过系统的软限制, 从而出现 socket 连接失败、 文件打开失败等情况。 d. 存储器组织有三种形式: 静态分配、 栈分配、 堆分配。 静态存储分配: 如果在编译时能确定目标程序运行的全部数据空间的大 小, 编译时安排好目标程序运行时的全部数据空间,确定每个数据对象的存 储位置, 那么则称这种分配策略为静态存储分配。 栈式存储分配: 子程序数据区为过程的活动记录 (Activation recorder) 简记 AR , 当一过程或函数被调用,活动记录 AR 被压入运行栈。当过程或子程序 返回时, 其活动记录被弹出运行栈, 也就是释放空间。 堆式存储分配: 用户可以自由的申请和释放空间。 数据对象的空间的分配与释放, 可在任何时间按任何顺序进行。 例如: C 和 C++ 的 alloc() 、 malloc() 。 e. 对于占用内存量很大的程序, 需要注意程序 malloc 的累积内存量应当低于 datasize 。 否则 malloc 函数会调度失败, 程序一般会提示: 内存不足。 f. stacksize 太小可能导致部分在其他机器上能够正常运行的程序无法运行, 出 现 coredump 。 因为程序编译完成后, 占用的 stack 大小是固定的, 如果低于 stacksize , 则程序无法装入内存。 例如: 在 Session. h 中定义了 CSession 类的一个成员: filename[MAX_FILE_NUM] [512] ; 该成员大概占用了 50K 的 stack size 。 50K 的 stacksize 导致程序在运行的时候, 无法将数据压栈, 从而出现总线 错误。 如果将 filename 修正成为 static 类型的, 如下: { … static char filename[MAX_FILE_NUM] [512] ; … } ; char CSession: : filename[MAX_FILE_NUM] [512] ; 那么 filename 就不需要反复压栈, 从而程序就可以正常运行。

1 . 3相关技巧 1 . 3.1 检查没有关闭的句柄 查看程序没有释放的句柄的方法, 可以通过: for (i=0;i<FOPEN_MAX;i++) // FOPEN_MAX 是程序可以打开的最大句柄 { if (close(i) ==EBADF) // 或其他的不影响程序功能的函数 printf("bad file handle:%dn", i) ; } 如果是 FILE * 类型, 可以通过 fileno 转换得到 file handle 。 在适当的时候, 用上述的方法检查那些没有关闭。



Tags:C 程序   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
UNIX 平台 C 程序开发心得
1. limit1 . 1 基本知识 查看 UNIX 操作系统资源限制 [HP-BILLFEE]limit cputime unlimited filesize unlimited datasize 1048576 kbytes stacksize 8192 kbytes coredumps...【详细内容】
2022-02-21  Search: C 程序  点击:(426)  评论:(0)  加入收藏
▌简易百科推荐
C++中的外部模板及其在当前编译文件中的实例化
在C++中,模板是一种泛型编程的工具,它允许程序员以一种类型无关的方式编写代码。然而,模板的一个常见问题是它们会导致编译时间增加,特别是在大型项目中,当多个源文件包含相同的...【详细内容】
2024-04-11  鲨鱼编程  微信公众号  Tags:C++   点击:(8)  评论:(0)  加入收藏
C++常见避坑指南
C++ 从入门到放弃?本文主要总结了在C++开发或review过程中常见易出错点做了归纳总结,希望借此能增进大家对C++的了解,减少编程出错,提升工作效率,也可以作为C++开发的避坑攻略。...【详细内容】
2024-04-03  腾讯技术工程    Tags:C++   点击:(7)  评论:(0)  加入收藏
C++ 之父反驳白宫警告:自诞生第一天起,C++ 的目标就一直是提高安全性
整理 | 郑丽媛上个月,美国白宫国家网络主任办公室(ONCD)在一份主题为《回到基础构件:通往安全软件之路》的 19 页 PDF 报告中,呼吁开发人员停止使用容易出现内存安全漏洞的编程语...【详细内容】
2024-03-25    CSDN  Tags:C++   点击:(7)  评论:(0)  加入收藏
八个 C++ 开源项目,帮助初学者进阶成长
通过参与或阅读开源项目的源代码,你可以获得丰富的实践机会。实际的项目代码比简单的教程更具挑战性,可以帮助你深入理解 C++ 的各种概念和技术。1.ThreadPool一个简单的 C++1...【详细内容】
2024-03-22  AI让生活更美好  微信公众号  Tags:C++   点击:(27)  评论:(0)  加入收藏
C# 中15个值得收藏的开源项目推荐
在开源的世界里,C# 编程语言也占有一席之地。这些开源项目涵盖了多个领域,从框架、库到工具,它们为C#开发者提供了丰富的资源和工具,帮助他们更高效地开发、测试和部署应用程序...【详细内容】
2024-03-20  程序员编程日记  微信公众号  Tags:C#   点击:(33)  评论:(0)  加入收藏
C#异步编程:Task.Run vs. async-await,掌握基础与高级用法
概述:C#中的异步编程有两主要方式:Task.Run用于在后台线程执行同步操作,而async-await更适用于清晰表达异步流程。基础用法展示了它们的简单应用,高级用法则演示了它们的结合使...【详细内容】
2024-03-09  架构师老卢  今日头条  Tags:C#   点击:(32)  评论:(0)  加入收藏
C++多线程编程:解锁性能与并发的奥秘
今天我们将深入探讨C++中的多线程编程,揭示多线程如何解锁性能潜力,提高程序的并发性能。什么是多线程?在计算机科学中,多线程是指一个进程(程序的执行实例)中的多个线程同时执行...【详细内容】
2024-02-03     AI让生活更美好  Tags:C++   点击:(73)  评论:(0)  加入收藏
C++代码优化攻略
今天我们将深入探讨C++性能优化的世界。在当今软件开发的浪潮中,高性能的代码是必不可少的。无论是开发桌面应用、移动应用,还是嵌入式系统,性能都是关键。1. 选择合适的数据结...【详细内容】
2024-01-26  AI让生活更美好  微信公众号  Tags:C++   点击:(121)  评论:(0)  加入收藏
C# 线程本地存储为什么线程间值不一样
为什么用 ThreadStatic 标记的字段,只有第一个线程拿到了初始值,其他线程都是默认值,让我能不能帮他解答一下,尼玛,我也不是神仙什么都懂,既然问了,那我试着帮他解答一下,也给后面类...【详细内容】
2024-01-26  一线码农聊技术  微信公众号  Tags:C#   点击:(74)  评论:(0)  加入收藏
C++质数检测器的设计与实现​
质数,作为数学中的一个基本概念,一直以其独特的性质吸引着众多研究者和爱好者。质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的数。在实际应用中,质数检测也扮演着...【详细内容】
2024-01-15  鲨鱼编程  微信公众号  Tags:C++   点击:(122)  评论:(0)  加入收藏
站内最新
站内热门
站内头条