我正在寻找一个小型的C库来处理utf8字符串.
具体而言,基于unicode分隔符进行拆分以与词干算法一起使用.
相关帖子建议:
ICU http://www.icu-project.org/(我发现它在我的嵌入式设备上太笨重了)
UTF8-CPP:http://utfcpp.sourceforge.net/(很好,但C++不是C)
有没有人发现任何平台独立的小代码库来处理unicode字符串(不需要进行归化).
我有一种情况,我需要处理大量(许多GB)的数据量:
每次迭代中的数据都是独立的.
我的问题是,我想最小化(如果可能消除)堆分配的内存使用量,因为它目前是我最大的性能问题.
有没有办法将C字符串(char*)转换为stl C++字符串(std :: string),而不需要std :: string来内部分配/复制数据?
或者,我可以使用stringstreams或类似的东西来重用大缓冲区吗?
编辑:感谢您的回答,为清楚起见,我认为修改后的问题将是:
如何有效地构建(通过多个附加)一个stl C++字符串.如果在循环中执行此操作,其中每个循环完全独立,我如何重新使用此分配的空间.
我有一个奇怪的情况,似乎表明GORM缓存问题
//begin with all book.status's as UNREAD
Book.list().each { book.status = Status.READ ; book.save() }
println (Book.findAllByStatus (Status.READ)) //will print an empty list
println (Book.list().findAll (it.status == Status.READ)) // will print all books
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么最后两个查询会返回不同的结果.
但是,如果我对book.save做了以下修改(flush:true).这两个println语句都将返回所有书籍.
我的印象是,在单个应用程序中这不是必需的.
作为参考,我正在使用
@HoàngLong
我的问题如下所示,假设action1/action2被多次调用,没有特定的模式
def action1 = {
Foo foo = Foo.get(params.id)
//... modify foo
foo.save() //if I flush here, it will be inefficient if action1 is called in sequence
}
def action2 = {
//if I flush …
Run Code Online (Sandbox Code Playgroud) 是否有可能拥有一个C静态库API,它在内部使用C++并将其隐藏在库的用户中?
我写了一个便携式C++库,我想静态链接到iPhone应用程序.
我使用Max OS X'静态库'模板创建了一个Xcode项目,并使用(extern"C")复制源代码,以及编写C wapper(处理异常).
我试图在另一个Cocoa iPhone应用程序中使用生成的库(.a文件).
如果我在调用ObjectiveC文件上使用(.mm)扩展并在库中的实现类上使用(.cpp),那么一切都很好.
但是当我尝试将包装器文件更改为(.c)扩展时,我在链接时得到未解析的符号,即使所有包装器函数文件都只是C函数.
因为C++是在库内部使用的,它是否意味着在外部它仍然必须被视为C++程序.无论如何都没有强制执行这种抽象?
编辑:谢谢你的回复,
我一直在使用extern"C",我只是不确定调用项目中需要哪些配置.即.如果调用的预测将需要知道它是否使用C++或可能是无知的并认为它是纯C库.
看起来我不能,我必须在ObjectiveC类上使用(.mm)文件.
我有一个程序,我希望能够在磁盘上存储某些数据(动态分配的块),以减少内存使用和持久性.
我的第一个想法是编写我自己的自定义分配器来管理磁盘上的文件内容,但我想看看有什么替代品.
我已经研究了自定义内存分配器和关于对象序列化的主题,但在将这些原则用于管理文件的地址空间时,存在细微差别,包括好的和坏的.
在这种情况下:
仅通过IO(读/写)功能而不是直接访问存储器
没有存储对象(方法/指针),只存储数据.
文件的大小不是静态的,因此它应该在需要时增长,而不是大而静态
对于我的用途,可以在碎片整理后重新映射现有指针
由于数据不是固定大小,因此大多数数据库实现似乎都不太适合.
我问,这个问题的最佳方法是什么?我应该实现一个简单的内存分配器,将文件视为堆吗?
作为参考,我在嵌入式设备上使用C++.
编辑:我已经实现了自己的内存管理器,它使用伙伴内存分配和块大小为2的权限.我很满意它是正确的,不泄漏,合并自由块,并可以做一个'停止世界'碎片整理.
问题是,正如预期的那样,存在相当多的内部和外部碎片.我不是这个领域的专家,虽然我发现它很迷人(我还是学生),但我想知道是否还有其他任何实现相同或类似的东西?当然我不能是唯一的一个?
一些有用但迄今为止不兼容的主题是:
mmap tbh我没有使用过mmap但是,它解决了文件IO,但没有解决文件地址空间的管理问题.
BOOST:序列化我现在有一种(可能是不合理的)不愿意使用boost库.
STXXL有趣但不解决可变大小的内存分配问题
Doug Lea Memory Allocator对内存分配器的问题有很好的见解,但是我无法尝试自己实现
在以下代码中:
class A {
};
class B : public A {
};
class C : public A {
int x;
};
int main (int argc, char** argv) {
A* b = new B();
A* c = new C();
//in both cases, only ~A() is called, not ~B() or ~C()
delete b; //is this ok?
delete c; //does this line leak memory?
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当使用具有成员函数的非虚析构函数(如C类)调用类上的delete时,内存分配器可以告诉对象的正确大小是什么吗?如果没有,记忆是否泄露?
其次,如果类没有成员函数,并且没有明确的析构函数行为(比如B类),那么一切都好吗?
我问这个是因为我想创建一个扩展的类std::string
,(我知道不推荐,但为了讨论它只是承担它),并重载+=
,+
运算符.-Weffc ++给了我一个警告,因为它std::string
有一个非虚拟析构函数,但是如果子类没有成员并且不需要在它的析构函数中做任何事情,这是否重要?
FYI +=
重载是进行正确的文件路径格式化,因此可以使用路径类,如:
class …
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2008 C++项目(Visa 32位).
我的源代码中有以下#include指令.
#include <example/header.h>
Run Code Online (Sandbox Code Playgroud)
在我的include路径中,我指定'example'的父目录,即
C:/.../include
Run Code Online (Sandbox Code Playgroud)
标题的完整路径是什么样的
C:/.../include/example/header.h
Run Code Online (Sandbox Code Playgroud)
但是,'example'是一个符号链接(通过文件浏览器"新快捷方式"创建的'.lnk').我收到以下错误
c:...\foo.cpp(37):致命错误C1083:无法打开包含文件:'example/header.h':没有这样的文件或目录
如果我将符号链接替换为实际目录,项目将正确编译.出于实际原因,我需要它作为一个象征性的联系.反正有没有让Visual Studio预处理器跟随链接?
如何将资源文件(配置/数据/图像)文件复制到iPhone上的应用程序主目录.
在iPhone上加载数据文件的相关问题?,收到一个答案"只需将它们添加到您的项目; Xcode将在构建您的应用程序时将它们复制到.app包".
怎么做到这一点?(如果这是一个简单的问题,手动参考/页面#很好)
我希望能够将文件复制到iPhone模拟器上并在运行时打开它.我试图通过添加"复制文件"目标来做到这一点,虽然我还没有能够在运行时找到这些文件.
我知道使用属性列表,或者sql lite数据库优先于文件io,但我仍然想了解如何实现这一点.
我有一个使用SQLite数据库的android应用程序.我在应用程序启动时打开数据库,但从不关闭它,因为它一直在使用.
告诉数据库将其所有更改刷新到永久存储的最佳方法是什么?我是否需要关闭它并重新打开或者是否有更有效的方法?
我的问题是,在手机上进行测试时,在多次写入后关闭手机有时会导致数据库在重新启动应用程序时丢失最新的更新,这对于数据库系统来说显然是不可接受的.
由于我无法找到如何捕获应用程序关闭事件,我不知道何时手动关闭数据库.
正斜杠"/"是solr字段名称中的保留字符吗?
我在编写solr排序查询时遇到问题,该查询将解析包含正斜杠"/"的字段
在对我的solr服务器进行http查询时:
q=*&sort=normal+desc
Run Code Online (Sandbox Code Playgroud)
会工作但是
q=*&sort=with/slash+desc
q=*&sort=with%2Fslash+desc
Run Code Online (Sandbox Code Playgroud)
两个都失败说"不能在多值字段上使用FieldCache:with"
每个solr文档包含两个int字段"normal"和"with/slash".使用我的solr架构索引字段
...
<field name="normal" type="int" indexed="true" stored="true" required="false" />
<field name="with/slash" type="int" indexed="true" stored="true" required="false" />
...
Run Code Online (Sandbox Code Playgroud)
有什么特殊的方法我需要在solr中编码正斜杠吗?或者我可以使用其他任何分隔符吗?我已经在使用' - '和"." 用于其他目的.