小编joh*_*ohn的帖子

如何在GCC C++中编写多行内联汇编代码?

这看起来不太友好:

__asm("command 1"
      "command 2"
      "command 3");
Run Code Online (Sandbox Code Playgroud)

我是否真的必须在每一行都加上双引号?

另外......因为多行字符串文字在GCC中不起作用,所以我也不能作弊.

assembly gcc inline-assembly

8
推荐指数
2
解决办法
4185
查看次数

C++标准库与凡人制作代码+我在哪里可以找到来源?

两个,也许是微不足道的问题:

1.为什么我不能击败STD功能?

真.我花了最后三天实现比std :: sort更快的东西,只是为了做到这一点.它应该是一个introsort,我怀疑它使用单个pivot版本quicksort里面.史诗失败.我的速度至少慢了两倍.

在我的痛苦中,我甚至复制粘贴其他 - 顶级 - 程序员代码.徒劳无功.我也对我的其他算法进行了基准测试...我的二进制搜索,以及upper_bound,lower_bound版本都被剥离了,实际上并没有用更少的指令.不过,它们的速度大约是其两倍.

我问,为什么,为什么,为什么?这引出了我的下一个问题......

2.在哪里可以找到STL库函数的源代码?

当然,我想看看他们的消息来源!是否有可能编写比这些更有效的代码,或者我是否处于抽象级别与我的"简单"main.cpp,我无法达到STL库使用的优化?

我的意思是举例......让我们拿地图......这是简单的联想容器.文档说它是用红黑树实现的.现在......尝试实现我自己的红黑树是值得的,或者他们带着这种喜悦:-)远离我,我应该把我得到的所有数据都扔到地图容器中?

我希望这确实有意义.如果没有,请原谅我.


c++

5
推荐指数
1
解决办法
411
查看次数

C++:字符串向量的随机访问时间如何工作?

我知道一个简单的int向量具有O(1)随机访问时间,因为在给定所有元素具有相同大小的情况下,很容易计算第x个元素的位置.

现在最新的字符串向量?

由于字符串长度不同,它不能有O(1)随机访问时间,可以吗?如果可以的话,背后的逻辑是什么?

谢谢.

更新:

答案非常简洁明了,谢谢大家的帮助.我接受了乔伊的回答,因为它简单易懂.

c++

5
推荐指数
2
解决办法
473
查看次数

关于ostream运算符<<的问题

假设我创建了一个包含char数组的类.现在,什么操作员处理这个:

myClass inst;
cout << inst;
Run Code Online (Sandbox Code Playgroud)

在"cout << inst;" 什么叫,只是通过班级的名字?谢谢.

c++ operator-overloading

5
推荐指数
1
解决办法
1188
查看次数

C++结构:成员越多,成员访问时间越慢?

我有一个结构链表.假设我将x百万个节点插入到链表中,然后我遍历所有节点以查找给定值.

奇怪的是(对我来说至少),如果我有这样的结构:

struct node
    {
    int a;
    node *nxt;
    };
Run Code Online (Sandbox Code Playgroud)

然后我可以通过列表迭代并检查比我在结构中有另一个成员的速度快十倍的值,如下所示:

struct node_complex
   {
   int a;
   string b;
   node_complex *nxt;
   };
Run Code Online (Sandbox Code Playgroud)

我也用C样式字符串(char数组)尝试过,结果是一样的:因为我有另一个成员(字符串),整个迭代(+值检查)慢了10倍,即使我甚至没有触及那个会员!现在,我不知道结构的内部是如何工作的,但它看起来要付出很高的代价......

捕获量是多少?

编辑:我是初学者,这是我第一次使用指针,所以很可能,错误就在于我.我会尽快发布代码(现在不在家).

更新:我再次检查了数值,我知道看到的差异要小得多:2倍而不是10倍.这肯定是更合理的.

虽然昨天的情况肯定也是如此,我昨晚非常疲惫,我不能分两个数字,我刚做了更多的测试,结果令人心碎.

相同数量的节点的时间是:

  1. 一个int和一个指针迭代槽的时间是0.101
  2. 一个int和一个字符串:0.196
  3. 一个int和2个字符串:0.274
  4. 一个int和3个字符串:0.147(!!!)
  5. 对于两个整数,它是:0.107

看看结构中有两个以上的字符串会发生什么!它变快了!有人把LSD放进我的咖啡里吗?没有!我不喝咖啡.

对于我的大脑而言,这对我来说太过疯狂了,所以我想我会自己解决这个问题,而不是在SO处耗尽公共资源.

(广告:我认为我的剖析课没有错误,无论如何我能看到自己眼睛的时差).

无论如何,谢谢你的帮助.干杯.

c++

4
推荐指数
2
解决办法
544
查看次数

Haskell 中对 mongoDB 的授权连接

如何向 mongoDB 进行身份验证?

我正在使用这个驱动程序http://hackage.haskell.org/package/mongoDB

我在文档或来源中找不到任何相关内容。

haskell mongodb

4
推荐指数
1
解决办法
586
查看次数

0x000001,0x000002等是应用程序级编程中的有效内存地址吗?

或者那些东西是为操作系统和类似的东西保留的?

谢谢.

c++

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

在Haskell中表达类型关系与函数依赖关系

我想表达我有3个相关的类型类.

我有两个文件.第一:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
module ModA where

class Class a b c | a -> b, b -> c where
    getB :: a -> b
    getC :: b -> c
Run Code Online (Sandbox Code Playgroud)

第二:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
module B where

import qualified ModA

data A = A {f1::String}

data B = B {f2::String}

data C = C {f3::String}

instance ModA.Class A B C where
    getB a = B "hey"
    getC a = C "ho"

getABForMe = ModA.getB (A …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass functional-dependencies

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

std :: string是否使用字符串实习?

我特别感兴趣的是窗户,mingw.

谢谢.

更新:首先,我认为每个人都熟悉字符串实习. http://en.wikipedia.org/wiki/String_interning

其次,我的问题很详细:我为练习敲了一个字符串课.没有什么花哨的你知道,我只是在课堂上存储大小和char*.

我使用memcpy进行分配.

当我这样做来测量std :: string和我的字符串类的赋值速度时:

string test1 = "  65 kb text ", test2;
for(int i=0; i<1000000; i++)
   {
   test2 = test1;
   }

mystring test3 = "65 kb text", test4;
for (int i=0; i<1000000; i++)
   {
   test4 = test3
   }
Run Code Online (Sandbox Code Playgroud)

std :: string是一个很大的赢家.我在赋值运算符(在我的类中)中没有做任何事情,但是用memcpy复制.我甚至没有使用"new"运算符创建一个新数组,因为我检查大小是否相等,并且只在需要时请求new.怎么会?

对于小字符串,没有问题.我看不出如何能的std :: string赋值比memcpy的速度更快,我敢打赌,它使用它太在后台,或类似的东西,所以这就是为什么我问实习.

Update2:通过单个字符赋值修改循环,如下所示:test2 [15] = 78,我避免了std :: string的copy-on-write效果.现在两个代码完全相同(好的,有1-2%的差异,但这可以忽略不计).因此,如果我没有完全弄错,mingw std :: string必须使用COW.

感谢大家的帮助.

c++

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

Winsock recv()不会阻止

我刚刚编译了这段代码:http: //www.win32developer.com/tutorial/winsock/winsock_tutorial_2.shtm

我添加了一些代码,因此它在无限循环中执行recv().我的问题,如果没有数据要读,它仍然没有阻止.

如果我认为recv应该阻止我的情况,我完全错了吗?

我添加的代码是:

for(;;)
{
  char buffer[1000];
  memset(buffer,0,999);
  int inDataLength = recv(Socket,buffer,1000,0);

  int nError=WSAGetLastError();
  if(nError!=WSAEWOULDBLOCK&&nError!=0)
  {
    std::cout<<"Winsock error code: "<<nError<<"\r\n";
    std::cout<<"Client disconnected!\r\n";

    // Shutdown our socket
    shutdown(Socket,SD_SEND);

    // Close our socket entirely
    closesocket(Socket);

    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

它结束了,在线之后std::cout<<"Client connected!\r\n\r\n";.我知道我从一个"非阻塞"的例子中复制了这个,但我不认为这个代码应该做任何非阻塞的事情,但是,我的for循环运行得像疯了!

c++ winsock

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