我将调试器设置为Native Only,解决方案配置是Debug但New Data Breakpoint ...选项仍然是灰色的,我无法使用它.任何人都可以提示我还需要改变什么吗?
看下面这个简单的例子:
use std::rc::Rc;
struct MyStruct {
a: i8,
}
fn main() {
let mut my_struct = MyStruct { a: 0 };
my_struct.a = 5;
let my_struct_rc = Rc::new(my_struct);
println!("my_struct_rc.a = {}", my_struct_rc.a);
}
Run Code Online (Sandbox Code Playgroud)
的官方文档Rc说:
该类型
Rc<T>提供T了在堆中分配的 type 值的共享所有权。
理论上是清楚的。但是,首先my_struct不是立即包装成Rc,其次MyStruct是一个非常简单的类型。我可以在这里看到 2 个场景。
my_struct被移入Rc内存内容时,它会从堆栈中复制到堆中。my_struct将移入 的问题Rc,因此它从一开始就将其放在堆中。如果数字 1 为真,那么可能存在一个隐藏的性能瓶颈,因为在阅读代码时没有明确看到内存被复制(我假设MyStruct要复杂得多)。
如果数字 2 为真,我想知道编译器是否总是能够解决这些问题。提供的示例非常简单,但我可以想象它my_struct要复杂得多,并且在移动到Rc.
我有一个看起来像这样的课程:
class Sha3_224():
def __init__(self):
self.keccak = keccak.Keccak_f(b = 1600)
self.sponge = sponge.Sponge(f = self.keccak, pad = sha3_hash_byte_padding, r = 1600 - 2*224, d = 224)
self.digest = bytearray(0)
def process(self, fd):
fd.seek(0, 2)
message = msg.Message(l = fd.tell(), fd = fd)
fd.seek(0, 0)
del(self.digest[0:len(self.digest)])
self.sponge.process(msg = message, out = self.digest)
print(self.digest)
print(len(self.digest))
def digest():
print(self.digest)
Run Code Online (Sandbox Code Playgroud)
当我实例化一个对象时,我可以process毫无问题地调用它的方法但是当我尝试调用它的digest方法时,我得到了
TypeError:'bytearray'对象不可调用
我还可以print(self.digest)在__init__没有错误.
谁能告诉我这种行为的原因?
我想为裸机ARM准备GNU工具链,以便与Geany IDE一起使用.有一些像这样的教程:构建裸机的GNU ARM工具链,但我不明白几个步骤.
首先,每个使用Linux操作系统的人都隐式拥有gcc,binutils和gdb,为什么要下载其他人呢?其次所有教程告诉我用这样的东西配置gcc:*./configure --target = arm-elf.它甚至做了什么?难道它只是强迫我使用调用命令行GCC ARM-ELF-GCC,而不是海湾合作委员会或它改变我的gcc内部的一些选项?
到目前为止,我已经准备好了makefile,但我仍然不确定编译器选项.我没有更改任何gcc配置选项,我用这样的标志调用编译器:
CFLAGS = -Wall -std=c99 -march=armv7-m -mtune=cortex-m0
Run Code Online (Sandbox Code Playgroud)
我可以通过使用适当的参数调用gcc来准备工具链,还是需要在gcc配置中进行一些更改?