C++11与最小垃圾回收

安全派生指针的操作包括:

1:在解引用基础上的引用,比如:&*p。

2:定义明确的指针操作,比如p + 1。

3:定义明确的指针转换,比如:static_cast<void*>(p)。

4:指针和整型之间的reinterpret_cast,比如:reinterpret_cast<intptr_t>(p)。这里的intptr_t指长度等于平台上指针的长度,由decltype声明。

C++ 11最小垃圾回收支持,基于安全派生指针这个概念,

enum class pointer_safety { relaxed, preferred, strict };

  • relaxed:完全不支持垃圾回收,和C++98/03一样。
  • preferred:垃圾回收器用于一些辅助功能,例如内存泄露检测或检测对象是否被一个错误的指针解引用。
  • strict:编译器支持最小垃圾回收以及安全派生指针的概念。

在C++11中可以使用get_pointer_safety()函数来查询编译器是否支持这个特性。如果返回值是strcit则表示支持最小垃圾回收。

pointer_safety  type = get_pointer_safety();

C++11允许程序员通过一些API来通知垃圾回收器不得回收该内存。可以使用垃圾回收的术语,声明该内存为“可到达”的。

    void declare_reachable(void* p);			
    template<class T> T* undeclare_reachable(T *p) noexcept;

选择在一大片连续的堆内存上进行指针式操作,下面语句可以让垃圾回收器不关心从p开始的连续n的内存:

void declare_no_pointers(char *p, size_t n) noexcept;
void undeclare_no_pointers(char *p, size_t n) noexcept;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值