问题列表 - 第249472页

一个简单的for循环的意外无意义优化尝试(在Visual C++ 2017中)

我正在玩Visual C++ 2017编译器做一些关于如何实现各种事情的测试,以便在遇到我没想到的行为时也能从代码中获得最大性能,也无法解释它.

我创建了一个简单的foreach方法来处理容器中的所有值.容器本身只存储一个size_t size和一个int *ptr.

这是在f中采用Lambda的foreach方法的代码:

template<class F>
__declspec(noinline) void foreach(F f)
{
    for (size_t i = 0; i < size; ++i)
        f(ptr[i]);
}
Run Code Online (Sandbox Code Playgroud)

我叫它

int sum = 0;
v.foreach([&](int item) { sum += item; });
Run Code Online (Sandbox Code Playgroud)

编译时,二进制文件的一部分如下所示:

        for (size_t i = 0; i < size; ++i)
00007FF6B3382310  xor         eax,eax  
00007FF6B3382312  mov         qword ptr [f],rdx  
00007FF6B3382317  cmp         qword ptr [rcx],rax  
00007FF6B338231A  jbe         MyVector::foreach<<lambda_c1957c9a484ac2f96c41b63c392e4950> >+2Ah (07FF6B338233Ah)  
00007FF6B338231C  nop         dword ptr [rax]  
            f(ptr[i]);
00007FF6B3382320  mov         r8,qword ptr [rcx+8] …
Run Code Online (Sandbox Code Playgroud)

c++ optimization assembly loops visual-c++

7
推荐指数
1
解决办法
260
查看次数

在机器代码中引用寄存器

我正在查看一些汇编代码和相应的内存转储,我无法理解正在发生的事情.我正在使用它作为x86操作码的参考,这是x86中寄存器的参考.我遇到了这些命令,我​​意识到我仍然错过了一大块难题.

8B 45 F8       - mov eax,[ebp-08] 
8B 80 78040000 - mov eax,[eax+00000478]
8B 00          - mov eax,[eax]
Run Code Online (Sandbox Code Playgroud)

基本上我不明白操作码之后的两个字节是什么意思,我找不到任何能为命令提供逐位格式的地方(如果有人能指出一个我会非常感激).

CPU如何知道每个命令有多长?

根据我的参考,这个8B mov命令允许使用32b或16b寄存器,这意味着有16个可能的寄存器(AX,CX,DX,BX,SP,BP,SI,DI及其扩展等价物).这意味着您需要一个完整的字节来指定在每个操作数中使用哪个寄存器.

到目前为止仍然很好,操作码后面的两个字节可以指定使用哪些寄存器.然后我注意到这些命令在内存中逐字节堆叠,并且所有这三个命令使用不同的字节数来指定解除引用第二个操作数时要使用的偏移量.

我想你可以限制寄存器只能使用带有16b的16b和带32b的32b,但这只能释放一个位,不足以告诉CPU有多少字节的偏移量.

哪些值对应哪些寄存器?

困扰我的第二件事是,尽管我的引用明确地给寄存器编号,但是在这些命令中操作码之后没有看到与字节的任何相关性.即使是他们自己,这些命令似乎也不一致.第二个和第三个命令都是从eax到eax,但在第一个字节中间有一点不同.

根据我的参考,我假设0是EAX,1是ECX,2是EDX,依此类推.但是,这并不能让我深入了解如何在RAX,EAX,AX,AL和AH之间进行指定.一些命令似乎只接受8b寄存器,而其他命令接受16b或32b,而在x86_64上,一些命令似乎接受16b,32b或64b寄存器.所以你会做一些类似0-7的事情是R,8-15 E,16-23非延伸,24-31 H和L?即使它是这样的,似乎应该更容易找到手册或指定的东西.

x86 assembly machine-code

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

MySQL在php中添加带空格的列

我想用空格向我的MySQL数据库添加列.

在SO问题方面,这就像我在mysql colum中使用php的空格插入数据一样接近

在php MyAdmin中我可以编写代码

ALTER TABLE `msrk_krit` ADD `test 1` VARCHAR(255)
Run Code Online (Sandbox Code Playgroud)

但是在php中我试图使用下面的代码:

mysqli_query($db, "ALTER TABLE msrk_krit ADD 'test 1' VARCHAR( 255 )")
Run Code Online (Sandbox Code Playgroud)

但我收到此错误代码:

错误说明:1064 SQL语法中有错误; 检查与您的MariaDB服务器版本对应的手册,以便在第1行的"1 VARCHAR(255)"附近使用正确的语法

有任何想法吗?

谢谢

php mysql

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

java8中如何将List&lt;Object&gt;转换成List&lt;Map&lt;String,String&gt;&gt;

我知道如何转换List<Object>Map<String,String>你可以在这个代码中看到:

Map<Long, String> divMap = divs.stream()
  .collect(Collectors.toMap(Div::getId, Div::getName));
Run Code Online (Sandbox Code Playgroud)

这个的输出是:

“1”:“A”,“2”:“B”

但我想返回List<Map<String,String>> 下面给出的输出:

["id":"1",Name="A"] ["id":"2",Name="B"]

java lambda java-8 java-stream

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

如何在usocket中创建特定类型的通用lisp(SBCL)向量?

我是Common Lisp的新手,我正在尝试学习如何使用网络套接字进行编程.在常见的lisp usocket api中,它指定了函数socket-sendsocket-receive采用simple-array (unsigned-byte 8)缓冲区.

我对lisp太新了解如何在sbcl common lisp中实现这一点.看来我可以使用这些功能vector,make-array但不能使用simple-array,也不能指定类型unsigned-byte 8.

有类似以下的合理和类型安全吗?:

  (let ((buffer (make-array (list-length input))) (input-length (list-length input)) )
    (loop 
      for i upto input-length collect i do
      (setf (nth i buffer) (parse-integer (nth i input))))
    (usocket::socket-send socket buffer input-length)))
Run Code Online (Sandbox Code Playgroud)

如果没有,我如何完成制作我需要的那种缓冲区?

lisp arrays common-lisp

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

如何在进行HTTP隧道时保持连接打开

我连接到代理,并使用connect命令发送一些自定义标头.这是一项要求.我收到200回复​​.然后我尝试使用相同的连接来执行get请求(搜索附加代码为"GET {0}")但我总是得到一个错误,最终"连接关闭"(无法回想起确切的错误).从根本上说,我需要通过像https:\ www.somesecuresite.com这样的网站来访问代码.某些部分被排除在外.

using (TcpClient client = new TcpClient(proxy, proxyPort))
            {
                using (NetworkStream stream = client.GetStream())
                {
                    string EncodedData = encodeUIDPWD(UserName, Password);
                    #region Establish Tcp tunnel

                    string reqString = "CONNECT {0}:{1} HTTP/1.1\r\nProxy-Authorization:Basic " + EncodedData + "\r\nHost: {2}:{3}\r\n";
                    reqString += "Proxy-Connection: keep-alive\r\n";
                    reqString += "Connection: keep-alive\r\n";
                    reqString += "Header1: " + header1 + "\r\n";
                    reqString += "Header2: " + header2 + "\r\n"; 
                    reqString += "None: " + None + "\r\n\r\n";

                    string rString = String.Format(reqString, myUri.Host, myUri.Port, myUri.Host, myUri.Port);
                    #endregion
                    ServicePointManager.SecurityProtocol …
Run Code Online (Sandbox Code Playgroud)

c# tcpclient http-tunneling

6
推荐指数
2
解决办法
487
查看次数

如何使用具有静态解析类型参数的静态扩展方法?

我想使用静态解析的类型参数和我添加到内置类型的一些扩展方法,比如float32int32,所以我尝试了以下方法:

module Foo =
    type System.Single with
        static member Bar x = x + 1.0f

    let inline bar (x : ^a) =
        (^a : (static member Bar : ^a -> ^a) x)

open Foo
[<EntryPoint>]
let main argv =
    System.Console.WriteLine (bar 1.0f) (* Compilation fails here *)
    0
Run Code Online (Sandbox Code Playgroud)

编译器抱怨说The type 'float32' doesn't support the operator 'Bar'.我究竟做错了什么?

extension-methods f# operators

6
推荐指数
1
解决办法
234
查看次数

运行 shell 脚本时的 Ansible 用户交互模块

我是 ansible 的新手,正在尝试学习基本的东西......

我正在尝试使用 ansible 执行下面的 shell 脚本...该脚本包含需要用户输入的情况条件。但是在 ansible 中运行时,它不会询问任何内容并完成任务。我希望我的 ansible 在执行期间询问 ai/p 并相应地执行脚本。

- hosts: localhost
  tasks:
  - name: Execute the script
    shell: /usr/bin/sh /root/ansible_testing/testing.sh
Run Code Online (Sandbox Code Playgroud)

shell脚本的片段是...

 echo "Press 1 for Backup"
 echo "Press 2 for MakeChange"
 echo "Press 3 for Keepsafe"
 echo "*******************************************"

 echo -n "Enter your choice : "
 read choice2

 case $choice2 in
 1)

   echo "Hello"
Run Code Online (Sandbox Code Playgroud)

ansible

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

引起:org.springframework.jms.support.converter.MessageConversionException:在消息上找不到类型id属性[_type]

我正在尝试这个春天的JMS样本,它给出了错误. https://spring.io/guides/gs/messaging-jms/ 引起:org.springframework.jms.support.converter.MessageConversionException: Could not find type id property [_type] on message from destination [queue://mailbox] 有趣的是,如果我克隆它并运行一切运行正常.如果我复制并粘贴,则会出错.

 @Bean // Serialize message content to json using TextMessage
public MessageConverter jacksonJmsMessageConverter() {
    MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
    converter.setTargetType(MessageType.TEXT);
    converter.setTypeIdPropertyName("_type");
    return converter;
}
Run Code Online (Sandbox Code Playgroud)

这段代码实际上导致了错误.搜索网络和文档,我仍然不知道如何设置setTypeIdPropertyName值以及如何设置"_type"它在此项目中引用的内容?由于消息没有这样的属性,那么它来自哪里?

java jackson jsm spring-boot

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

Jsoup选择其子元素不包含特定标记的元素

我正在使用Jsoup从网页中提取链接,但我想避免img链接.所以下面的代码:

Document doc = Jsoup.connect(i_Url).userAgent("chrome/5.0").get();
Elements links = doc.select("a[href]");
Run Code Online (Sandbox Code Playgroud)

会得到我所有的链接,但其中一些是图像.执行以下操作:

links.stream().filter(link -> !link.tagName().equals("img"));
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为元素的(= link)元素是带有img标记的元素,例如:

<a href="index.htm" title="tutorialspoint">
  <img alt="tutorialspoint" src="/java/images/logo.png">
</a>
Run Code Online (Sandbox Code Playgroud)

我尝试过各种各样的事情,例如:

Elements links = doc.select("a[href]").select(":not(img)"); //or
Elements links = doc.select("a[href]:not(img)"); //or
Elements links = doc.select("a[href]")
links.stream().filter(link -> link.children().contains(Tag.valueOf("img")));
Run Code Online (Sandbox Code Playgroud)

我只是试着玩各种各样的变化,没有一个工作.对于HTML,我不是一个很专家.帮助将不胜感激.谢谢

html java jsoup

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