标签: compiler-construction

编译为c时进行垃圾收集的算法

我需要某种算法将垃圾收集添加到我的语言(正在编译为 c)并添加一个 free 语句或其他方式,以便它不会有内存泄漏。

是的,我在编译为 C 时查看了垃圾收集,但我不明白答案,并希望得到关于如何做的更详细的答案。

编辑:例如,如果代码是

int *i = malloc(4);
Run Code Online (Sandbox Code Playgroud)

用我的语言,这应该编译为

int *i = malloc(4);
Run Code Online (Sandbox Code Playgroud)

进而

free(i);
Run Code Online (Sandbox Code Playgroud)

一旦我不再使用或退出堆栈框架 谢谢

c compiler-construction algorithm garbage-collection

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

二进制操作数无效

我有一种方法可以检查数字是偶数还是奇数的天气:

   -(BOOL)numberIsEven:(unsigned int *)x {


  if (x & 1)
 {
  return TRUE;
 }
 else
{
 return FALSE;
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我编译它时,我都会收到错误消息:

Invalid operands to binary %
Run Code Online (Sandbox Code Playgroud)

所以它作为模数函数编译到汇编中并且以某种方式失败,但是如果我使用基于模数的函数(可以说更慢),我会得到同样的错误!

帮我堆栈溢出

谢谢 - 奥利

compiler-construction assembly gcc objective-c

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

“std::string const”与“const std::string”

奇怪的行为。我正在用 C++ 开发 android 本机应用程序,但遇到了错误。某些函数由于某种原因没有被调用。经过一些恢复和比较..

这给程序带来了麻烦..

const std::string STR_PATH_ASSET("assets/");
const std::string STR_PATH_SD("/sdcard/unlock_data/assets/");
const std::string STR_SUFFIX_PNG(".png");
const std::string STR_SUFFIX_KTX(".ktx");
Run Code Online (Sandbox Code Playgroud)

这使程序工作..

std::string const STR_PATH_ASSET("assets/");
std::string const STR_PATH_SD("/sdcard/unlock_data/assets/");
std::string const STR_SUFFIX_PNG(".png");
std::string const STR_SUFFIX_KTX(".ktx");
Run Code Online (Sandbox Code Playgroud)

无论如何它都有效,但我不知道为什么这种差异会导致如此奇怪的行为。有什么猜想吗??


添加了完整的源代码。

这不仅是“std::string const”与“const std::string”的问题,而是声明本身。对不起。

这是我的源代码。当我取消注释那些 std::string 的东西时,它无法正常工作。我在我的 android 上画了一些东西,但是当使用 std::string 东西时,一些网格(顶点)的初始位置不同。从逻辑上讲,它不能影响这个常量是否存在。我在 windows cygwin 上使用 ndk 编译器版本 4.6,ndk 版本 14。这个 const std::string 声明会影响另一个堆栈的内存吗?IE。transh值什么的?

typedef enum _ImageCompressType{
    //REF http://stackoverflow.com/questions/9148795/android-opengl-texture-compression
    COMPRESS_UNAVAILABLE = -1,
    COMPRESS_ETC1 = 1,
    COMPRESS_PVRTC,
    COMPRESS_ATITC,
    COMPRESS_S3TC
}ImageCompressType;

typedef enum _FileDataFrom{
    FROM_ASSET, FROM_SD
}FileDataFrom;

//std::string const STR_PATH_ASSET("assets/");
//std::string const …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction constants stdstring android-ndk

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

当条件为假时,读取"if"条件(任何语言)?

好吧,这是一个简单的问题,可能有点明显但是,当'if'有一个错误的条件时,它是由编译器读取的,还是编译器直接跳过它?

谢谢!:)

compiler-construction if-statement

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

是否有我可以使用的极简主义Java编译器/调试器(在IDE之外)?

我真的不喜欢在像Netbeans这样的IDE中编写和编译简单代码是多么复杂(创建一个新项目,文件,制作包等).我只想编写一些代码,然后编译/调试它然后重复.我没有做任何保证使用Netbeans的严肃项目.是否存在极简主义编译器/调试器,或者至少是超极简主义IDE?

java compiler-construction debugging text-editor

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

如何证明'a''b'不会在python shell中自动连接?

根据这篇文章:代码像Pythonista:惯用Python

有一条线说明:

"那是因为这种自动连接是Python解析器/编译器的一个特性,而不是解释器.你必须使用"+"运算符在运行时连接字符串."

我不明白这个陈述,因为我不知道python编译器或解释器实际上是如何工作的.连接如何工作?因为:

>>> a = 'three'
>>> b = 'four'
>>> a b
Run Code Online (Sandbox Code Playgroud)

不评估为:

>>> a = 'three'
>>> b = 'four'
>>> a b
>>> 'three' 'four'
>>> 'threefour'
Run Code Online (Sandbox Code Playgroud)

是否有任何工具可以跟踪从原始文本'*.py'开始直到从终端打印输出的编译过程?

python compiler-construction debugging interpreter

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

使用双引号将字符串初始化为在C++中使用泛型算法是否安全?

我正在学习C++ Primer第5版.在页479,它提到了

string sum = accumulate(v.cbegin(), v.cend(), "");因为no + on const char*"" 而不正确

类型v是顺序容器,例如矢量.

我发现使用双引号创建字符串是危险的,特别是对于使用通用算法的情况,因为它需要对象的已定义运算符.

但我无法弄清楚描述的no + on const char*含义是什么?

  1. 它会调用string (const char* s);c-string中定义的构造函数吗?
    我认为这是编译器所做的,因为它解释了用C++中的引号初始化的字符串.

  2. 我们应该用双引号创建一个字符串吗?它会导致overriding on operators失败.

c++ compiler-construction string generics

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

默认情况下,C可以通过指针传递

C是一种古老的语言.例如,你知道使用它没有问题吗?运算符而不是带有指针的 - >运算符,并且由于遗留原因而维护了 - >?看到这里.

研究几个C代码,可以注意到大多数时间结构是使用指针而不是值传递的.数组也通过指针传递.

是否可以更改语法以默认将结构作为指针传递?例如,请考虑以下示例:

struct Point {
    float x;
    float y;
};

struct Line {
    Point! p0; // ! means that we want a value, not a pointer
    Point! p1;
};

struct Line2 {
    Point p0; // would be the same as Point*
    Point p1;

}

void foobar(Line line) { // would mean Line* line
    ...
}

void foobaz(Line! line) { // would mean Line line
    ...
}
Run Code Online (Sandbox Code Playgroud)

我们不考虑可读性,例如,有些人认为 - >明确指出这是一个指针.这不是重点.

这是一个问题:使用这种语法可能会出现什么问题或角落案例?例如:'使用这样的语法,就不可能做到这一点或那个'

Java实际上与此提议类似:一切都是引擎盖下的指针.区别在于Java具有垃圾收集器,并且对象总是在堆中分配(对象本身,而不是"指针"),而在C中,结构可以在堆栈中分配(尽管我看到在堆中分配的大部分时间) .

如果有人想知道我为什么这么问,那是因为我正在为低级开发创建一种编程语言,我想优化常见情况的语法.虽然我喜欢C语言本身,但我不得不使用头文件(例如,在两个地方更新函数签名),缺乏对函数重载的支持(我不喜欢编写int_list_add,float_list_add)和类似. …

c compiler-construction pointers

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

"int a,b;"之间的性能差异 和"int a; int b;"?

正如标题所说,它很容易被描述.

每次我可以将两个单独的语句放在一个块中时,我就会想到这个问题.特别是当我编写像NP完全问题的CPU成本问题时.

是否有必要将两个单独的陈述合并在一起?

c c++ compiler-construction compilation compiler-optimization

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

为什么即使在Ocaml中实现了第一个Rust编译器,Rust的性能还是比Ocaml快

我发现最初的Rust语言编译器是用Ocaml编写的。所以我以为Rust将与Ocaml的性能类似。但是当我查看基准Ocaml与C ++以及Rust与C ++并将Ocaml与Rust进行比较时。它给了我什么...?,但是怎么...?

即使Rust源自Ocaml,如何将Rust的性能比Ocaml更快?

然后它引起了另一个问题?

从C派生的基于编译器的语言是否可以比C本身的性能更快?

c++ compiler-construction performance compilation rust

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