特别是在C++中,例如:语义差异是什么:
static const int x = 0 ;
Run Code Online (Sandbox Code Playgroud)
和
const int x = 0 ;
Run Code Online (Sandbox Code Playgroud)
两者static作为键和存储类说明(即内部和功能外).
前几天在我的白皮书中巡航时,我在C关键字列表中注意到了. entry是该列表中的关键字之一.
它留作将来使用.回想一下我的Fortran时代,有一种类型的函数使用entry语句来创建第二个参数签名,或者进入函数的入口点.
这是最初打算用于什么条目?或者完全不同的东西?
关于entry关键字的故事是什么?
@entity和@embeddable注释在类声明之前添加每个注释时的区别?
我最近问过一个关于Neo4j的问题,我开始工作,看起来不错.它是可嵌入的,它是用Java编写的,并没有(太多)依赖.
然而,这是一个图形数据库,我不知道将它用作简单的键/值存储是否是一个好主意.
基本上我有一张大地图,在Java中看起来像这样:
Map<Integer,Map<String,String>>
Run Code Online (Sandbox Code Playgroud)
我在主地图中有几千万个条目,每个条目都包含一个属性/值的映射."内部"地图相对较小:约20个条目.
我需要一种方法来保持从运行webapp到另一个的映射.
使用Neo4j,我所做的是为每个ID(整数)创建一个节点,然后为内部映射中的每个条目放置一个属性.从我早期的测试看起来似乎有效,但我不确定这是一个很好的方法.
用Java编写的哪个可嵌入数据库会用到吗?
要求是:
用Java编写
可嵌入(所以没什么太大)
不是 SQL(*)
开源
易于备份(我需要能够在服务器运行时进行"实时"备份)
我的术语也可能有点不对,所以请随时帮助我/纠正我.对于我的"地图地图",最合适的是键/值对DB吗?
由于键/值对DB,文档DB,大表,图形DB等之间的差异,我有点迷失.
我也喜欢使用像Neo4J这样的图形数据库来满足我的需求(我认为性能确实不会是一个问题,因为我会看到相对少量的条目).
当然我可以自己坚持我的地图地图,但我真的不想在这里重新发明任何轮子.我想重用一个久经考验的DB ......
(*)我不想要SQL的原因是我总是会有这个"地图图",内部地图会不断发展,所以我不想要太结构化的东西.
今天在我的采访中,采访者问:printf是一个函数,每个函数都返回一些东西; int,void,float等.现在printf返回什么,因为它是一个函数?
[ 编辑 ]对于背景阅读,并且要清楚,这就是我所说的:volatile关键字简介
在查看嵌入式系统代码时,我看到的最常见错误之一是省略了线程/中断共享数据的volatile.但是我的问题是,volatile当通过访问函数或成员函数访问变量时,是否"安全"不使用?
一个简单的例子; 在以下代码中......
volatile bool flag = false ;
void ThreadA()
{
...
while (!flag)
{
// Wait
}
...
}
interrupt void InterruptB()
{
flag = true ;
}
Run Code Online (Sandbox Code Playgroud)
...变量flag必须是volatile,以确保ThreadA中的读取不被优化,但是如果通过函数读取标志,那么......
volatile bool flag = false ;
bool ReadFlag() { return flag }
void ThreadA()
{
...
while ( !ReadFlag() )
{
// Wait
}
...
}
Run Code Online (Sandbox Code Playgroud)
...... flag还需要挥发吗?我意识到它不易受到伤害,但我担心的是它何时被省略而且没有发现遗漏; 这会安全吗?
上面的例子是微不足道的; 在真实的情况下(以及我要求的原因),我有一个包装RTOS的类库,这样就有一个抽象类cTask来自任务对象.这样的"活动"对象通常具有访问数据的成员函数,而不是可以在对象的任务上下文中修改但可以从其他上下文访问; 这样的数据被声明为volatile是否至关重要?
我真的对这些数据的保证感兴趣,而不是实际编译器可能做的事情.我可能会测试一些编译器并发现它们从未通过访问器优化读取,但有一天会发现编译器或编译器设置使得这个假设不真实.我可以想象,例如,如果函数是内联的,那么这样的优化对于编译器来说是微不足道的,因为它与直接读取没有什么不同.
如何以二进制模式将完整的嵌入式h2内存数据库保存/加载到某个文件或目录,以加快加载速度.
我想用它来缓存数据,所以我不必每次都运行create table/insert子句的所有行.
我的电路板在SPI上集成了STM32微控制器和SD/MMC卡,并以48 ksamples/s采样模拟数据.我正在使用Keil Real-time Library RTX内核和ELM FatFs.
我有一个高优先级的任务,通过DMA以40个样本(40 x 16位)的块来捕获模拟数据; 数据通过长度为128的队列(构成大约107毫秒的样本缓冲)传递给第二个低优先级任务,该任务将样本块整理成2560字节缓冲区(这是512字节SD扇区大小和40个样本块大小).当此缓冲区已满(32个块或约27毫秒)时,数据将写入文件系统.
通过检测代码,我可以看到每32个块,数据被写入并且写入大约需要6 ms.这持续到(在FAT16上)文件大小达到1 MB,当写操作需要440 ms时,此时队列填充并且中止日志记录.如果我将卡格式化为FAT32,则"long-write"事件之前的文件大小为4 MB.
发生这种情况的文件大小在FAT16和FAT32之间发生变化的事实告诉我,它不是卡的限制,而是文件系统在1 MB或4 MB边界上执行需要额外时间的事情.
似乎我的任务正在及时安排,并且ELM FatFs代码仅在1 MB(或FAT32为4)边界消耗时间.
有解释或解决方案吗?这是一个FAT问题,或者更确切地说是ELM的FatFs代码?
我考虑过使用多个文件,但根据我的经验,FAT不能很好地处理单个目录中的大量文件,这也会失败.根本不使用文件系统并且写入原始卡是可能的,但理想情况下我想在带有标准驱动程序且没有特殊软件的PC上读取数据.
我想到尝试编译器优化来缩短写入时间; 这似乎有效果,但写入时间似乎变化多了.在-O2我确实得到了一个8 MB的文件,但结果不一致.我现在不确定文件大小和失败点之间是否存在直接关联; 我已经看到它在不同的文件长度上以这种方式失败,没有特定的边界.也许这是卡性能问题.
我进一步对代码进行了检测并采用了一种分治方法.这种观察结果可能会使问题过时,以前所有的观察结果都是错误的或是红色的.
我最后将其缩小为一个多扇区写入(CMD25)的实例,其中卡的"等待就绪"轮询对于块5中的前三个扇区有时需要174 ms.等待就绪的超时设置为500毫秒,所以它会很开心 - 等待那么长时间.在一般情况下,迭代地使用CMD24(单扇区写入)要慢得多 - 每个扇区140毫秒 - 而不是偶尔.
所以这似乎是卡的一种行为.我将努力尝试一系列卡SD和MMC.
我有第三方EXE.我只需要从我的C#应用程序运行它.
我的主要目标是从我的C#文件中获取第三方可执行文件的版权.
有没有更好的方法来做到这一点.
我怎样才能做到这一点 ?
谢谢
Menaka
我知道,为了比较两个浮点值,需要使用一些epsilon精度,因为它们并不精确.但是,我想知道是否有边缘情况,我不需要那个epsilon.
特别是,我想知道做这样的事情总是安全的:
double foo(double x){
if (x < 0.0) return 0.0;
else return somethingelse(x); // somethingelse(x) != 0.0
}
int main(){
int x = -3.0;
if (foo(x) == 0.0) {
std::cout << "^- is this comparison ok?" << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道有更好的方法可以编写foo(例如,另外返回一个标志),但我想知道一般情况下是否可以分配0.0给浮点变量然后将其与之比较0.0.
或者更一般,以下比较是否总是如此?
double x = 3.3;
double y = 3.3;
if (x == y) { std::cout << "is an epsilon required here?" << std::endl; }
Run Code Online (Sandbox Code Playgroud)
当我尝试它时,似乎工作,但可能是一个人不应该依赖它.