相关疑难解决方法(0)

无堆语言如何工作?

我听说过无堆语言.但是,我不知道如何实现这样的语言.谁能解释一下?

stack language-design stackless

57
推荐指数
5
解决办法
9262
查看次数

std :: array <>是否只保证堆栈的分配?

std::array<int,10>(没有我自己使用new)保证在堆栈中分配,而不是由C++ - Standard分配?

要清楚,我不是故意的new std::array<int, 10>.我主要想知道,如果允许标准库new在其实现中使用.

c++ arrays stack static-allocation dynamic-allocation

30
推荐指数
2
解决办法
9103
查看次数

堆上分配了变量吗?

我对内存分配主题进行了测验,这个问题使我感到困惑,因为我对答案不满意。(问题

正如我已经学会了,我们可以创建一个“ 对象通过创建一个堆上的” 指针变量,使其指向我们在堆(使用分配的内存new关键字)。

对于一个特定的例子:

double* a = new double(-1.0f); 
Run Code Online (Sandbox Code Playgroud)

变量 a是一个指针,在堆栈上创建,指向堆上的内存。所以实际上,说a在堆上分配是错误的。我的理解正确吗?

c++ memory-management

17
推荐指数
2
解决办法
1203
查看次数

C是否需要堆栈和堆才能运行?

人们谈论堆栈和堆是什么以及它们之间的差异.但我很想知道如果一个CPU不支持堆栈和堆结构,那么C可以在没有堆栈和堆的情况下正常运行吗?

c heap stack

9
推荐指数
2
解决办法
310
查看次数

是否会在堆上分配内存以支持临时对象与const引用的嵌套绑定?

请考虑以下代码,它const以"嵌套"方式将临时对象绑定到引用:

#include <iostream>

std::string foo()
{
    return "abc";
}

std::string goo()
{
    const std::string & a = foo();
    return a;
}

int main()
{
    // Is a temporary allocated on the heap to support this, even for a moment?
    const std::string & b = goo();
}
Run Code Online (Sandbox Code Playgroud)

我一直试图理解编译器在内存存储方面必须做些什么才能支持这种"嵌套"结构.

我怀疑对于调用foo(),内存分配很简单:std::string当函数foo()退出时,将在堆栈上分配a的存储.

但是,编译器必须做什么来支持所引用的对象的存储b?函数的堆栈goo必须展开并"替换为" b引用的堆栈上的对象,但是为了展开堆栈goo,编译器是否需要在堆上暂时创建对象的副本(在复制之前)它回到不同位置的堆栈)?

或者编译器是否可以完成此构造的要求而不在堆上分配任何存储,即使是暂时的?

或者是它甚至可以将编译器使用相同的存储位置,以由所引用的对象b作为对象由称为a,而不做任何堆栈或在堆上的任何附加配置?

c++

3
推荐指数
1
解决办法
266
查看次数

为什么 char16_t 被定义为与 uint_least16_t 而不是 uint16_t 具有相同的大小?

阅读 C++17 草案 §6.9.1/5:

类型char16_tchar32_t分别表示不同类型的具有相同的大小,符号性,和对准如uint_least16_tuint_least32_t,分别在<cstdint>被称为底层类型。

现在参考 C11 草案 §7.20.1.2/2,这是 C 库继承的参考:

typedef 名称uint_leastN_t指定宽度至少为N 的无符号整数类型,这样具有较小大小的无符号整数类型至少具有指定的宽度。因此,uint_least16_t表示宽度至少为 16 位的无符号整数类型。

注意“至少”部分。这意味着char16_t实际上可能有例如 32 位,从而形成char16_t一个 UTF-16 原始数据的错误表示的数组。在这种情况下,将此类数组写入二进制文件将导致有效代码单元与 U+0000 字符交替。

是否有充分的理由char16_t根据uint_least16_t而不是来定义uint16_t?或者它只是标准中的一个缺陷?

c++ unicode types utf-16

3
推荐指数
1
解决办法
547
查看次数

堆和堆栈在C++中意味着什么?

我听到这些词语被抛出很多,但我不明白它们在含义.有人告诉我在标准中查找它,但在索引中没有提到"堆栈"或"堆",只有堆栈展开没有说明堆栈是什么.

这些概念是否存在于C++中?

c++ language-lawyer

-1
推荐指数
1
解决办法
163
查看次数