C++/C 语言独立内存分配

Posted

技术标签:

【中文标题】C++/C 语言独立内存分配【英文标题】:C++/C Language Independent Memory Allocation [closed] 【发布时间】:2013-12-03 23:00:15 【问题描述】:

定义一个宏来定义 C++ 的 new 和 C 的 malloc 是常见的做法吗? (以及等效的删除/免费宏)

【问题讨论】:

C C++?选一个。无论如何,newmalloc 已经是可移植的了。你在找什么? 不,它不常见,它很糟糕,因为它会混淆代码。将new 用于C++,malloc 用于C。可移植性是平台 独立性(或#ifdef 块用于特定于平台的代码)。 您能否说明您要达到的目标?您是否正在寻找可在 32 位和 64 位 Windows、Linux、IBM OS/400(AS/400 架构)、Sun Solaris、OSE Delta、Symbian OS 以及 8 位微控制器以及介于两者之间的所有设备上运行的代码?还是选择较少的机器? 【参考方案1】:

定义一个宏来转换为 C++ 的 new 和 C 的 malloc 是常见的做法吗? (以及等效的删除/免费宏)

没有。

我想知道这样的事情是否是常见的做法,因为我从未在任何程序中看到它使用过,但我想不出任何理由为什么这样做会是一件坏事

C 不是 C++。 C++ 不是 C。绝对没有理由这样做。

【讨论】:

【参考方案2】:

不可能使malloc 的行为与new 完全相同(没有太多技巧,并且其中的一些细节很难实现),因为new 监督对象的构造。

malloc 变成new 稍微容易一些,因为malloc 所做的并没有什么“特别”之处。

如果您想要可移植的代码,请不要用 C++ 编写它[如果您担心 C++ 或类似的可用性],请使用 C(完全可以使用 C++ 以合理可移植的方式调用 C 函数方式,相反的方式要困难得多)。但是,如果您使用 C++ 编写,则使用 new,而不是 malloc

当然请注意,如果您有 C++ 编译器,并且您的环境由于某种原因不支持 new(例如,在 Windows XP 内核模式驱动程序中使用 C++ 代码,就像我曾经使用过的那样 [否,这不是我的想法,我没有实现它,我只是在项目中工作])可以实现一个基于 malloc 或其他一些基本“给我”的运算符 new some memory" 类型函数[在 Windows 内核驱动程序中也没有malloc,但当然有分配内存的方法]。

当然,重要的是要考虑到您实际尝试实现的目标 - 可移植性只有在您拥有某种本身对在许多平台上运行有意义的代码时才真正有用,而且通常更容易不使代码过度可移植 - 它确实会使代码变得非常复杂。

编辑:我必须补充一点,我不确定我是否理解为什么 C++ 在可移植性方面存在困难,只要我们谈论源代码可以为不同的机器编译。如果您使用 C++ 分发库,它会变得有点棘手,因为 C++ 的某些部分在二进制代码中没有很好地定义。但这是一个特例,我不相信这应该成为你写作语言的指导标准。

【讨论】:

如果你不使用类,那你为什么还要担心 C++。使用 C。微软的编译器可能不是最符合标准的,但它编译 C 和 C++ 一样。如果你不使用类,C++ 是一门毫无意义的语言 [虽然它确实添加了一些其他东西,但 C++ 的力量来自于使用类]。我建议你学习 C++ 并了解它的优点和缺点。 不,C 没有引用 - 它不是语言的一部分 - 使用指针代替(从引用和指针生成的实际代码基本相同,只是一点“语法糖”这使得引用在代码中看起来不同)【参考方案3】:

没有。 newmalloc的语义不同:malloc分配内存; new 分配内存并调用构造函数。

【讨论】:

以上是关于C++/C 语言独立内存分配的主要内容,如果未能解决你的问题,请参考以下文章

c语言中啥是动态分配内存?

怎么查看动态分配内存空间的大小(c语言)。

用C语言分配开辟内存问题

C语言中的动态内存分配的用法举例

C语言中内存分配

c语言数组在内存中是怎么分配的?