小编Pat*_*ski的帖子

如何找到运行线程的处理器编号?

我有一个内存堆管理器,它根据系统上的处理器数量将堆分成不同的段.内存只能分配给当前运行的线程处理器的分区.这将有助于不同的处理器继续运行,即使两个不同的处理器想要同时分配内存,至少我相信.

我找到了GetCurrentProcessorNumber()Windows 的功能,但这仅适用于Windows Vista及更高版本.有没有一种适用于Windows XP的方法?

另外,这可以通过POSIX系统上的pthread来完成吗?

c linux windows-xp memory-management pthreads

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

是否有任何具有非IEEE C/C++浮动格式的现代平台?

我正在写一个视频游戏,Humm和Strumm,它需要在游戏引擎中使用网络组件.我可以很容易地处理字节序的差异,但是我试图处理可能的float内存格式时遇到了障碍.我知道现代计算机都有标准的整数格式,但我听说他们可能都不会将IEEE标准用于浮点整数.这是真的?

虽然我当然可以将它作为字符串输出到每个数据包中,但我仍然需要转换为每个客户端的"众所周知的格式",无论平台如何.标准printf()并且atod()不够.

请注意,因为这个游戏是一个可以在GNU/Linux,*BSD和Microsoft Windows上运行的免费/开源软件程序,所以我不能使用任何专有解决方案,也不能使用任何单平台解决方案.

干杯,
帕特里克

c++ memory types network-programming ieee-754

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

6个八位位组的UTF-8序列是否有效?

UTF-8可以编码5或6字节序列,允许编码所有Unicode字符吗?我的标准越来越矛盾了.我需要能够支持每个Unicode字符,而不仅仅是那些U + 0000..U + 10FFFF范围内的字符.

(所有引用均来自RFC 3629)

第3节:

在UTF-8中,使用1到4个八位字节的序列对来自U + 0000..U + 10FFFF范围(UTF-16可访问范围)的字符进行编码.一个"序列"的唯一八位字节将高阶位设置为0,其余7个字节用于编码字符编号.在n个八比特组的序列中,n> 1,初始八比特组将n个高阶比特设置为1,然后将比特设置为0.该八比特组的其余比特包含来自字符数的比特.要编码.以下八位字节都将高阶位设置为1,后面的位设置为0,每个字节留下6位以包含要编码的字符的位.

那么不是所有可能的字符都可以用UTF-8编码吗?这是否意味着我不能编码来自不同平面的字符而不是BMP?

第2节:

从未出现八位字节值C0,C1,F5至FF.

这意味着我们不能用5或6个八位字节编码UTF-8值(或者甚至是4个不在上述范围内的一些)?

第12节:

将字符范围限制为0000-10FFFF(UTF-16可访问范围).

看看之前的RFC证实了这一点......他们减少了字符的范围.

第10节:

编码为UTF-8时会出现另一个安全问题:UTF-8的ISO/IEC 10646描述允许编码高达U + 7FFFFFFF的字符数,产生最多6个字节的序列.因此,如果字符数范围没有明确限制为U + 10FFFF,或者缓冲区大小没有考虑到5字节和6字节序列的可能性,则存在缓冲区溢出的风险.

那么这些序列是否符合ISO/IEC 10646定义,而不是RFC 3629定义?我应该遵循哪一个?

提前致谢.

unicode utf-8

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

快速登录C++ float ...这段代码中是否有任何平台依赖?

在线搜索,我发现以下例程用于计算IEEE格式的浮点符号.这也很容易扩展到双倍.

// returns 1.0f for positive floats, -1.0f for negative floats, 0.0f for zero
inline float fast_sign(float f) {
    if (((int&)f & 0x7FFFFFFF)==0) return 0.f; // test exponent & mantissa bits: is input zero?
    else {
        float r = 1.0f;
        (int&)r |= ((int&)f & 0x80000000); // mask sign bit in f, set it in r if necessary
        return r;
    }
}
Run Code Online (Sandbox Code Playgroud)

(来源:``32位漂浮物的快速标志'',Peter Schoffhauzer)

但是,由于二进制位操作,我厌倦了使用这个例程.我需要我的代码在具有不同字节顺序的机器上工作,但我不确定IEEE标准中有多少指定,因为我找不到今年发布的最新版本.有人能告诉我这是否有效,无论机器的字节顺序如何?

谢谢,帕特里克

c++ floating-point endianness ieee-754

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

虚拟成员函数定义可以出现在类模板之外吗?

在我正在编写的项目中,我有一个用作基础类的类模板,并且它具有一个派生类覆盖的虚拟方法。虚拟功能也有自己的实现。但是,我遇到的问题可以归结为以下代码:

#include <iostream>

template <typename T> struct A {
    virtual void do_something()
#ifdef INLINE_CLASS
    { std::cout << "Saluton, mondo!\n"; }
#else
    ;
#endif
};

#ifndef INLINE_CLASS
template <typename T> virtual void A<T>::do_something() {
    std::cout << "Saluton, mondo!\n";
}
#endif

int main(int argc, char** argv) {
    A<int> a;
    a.do_something();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我使用定义的INLINE_CLASS进行编译时,代码可以很好地编译,但是如果没有它,我将在GCC中收到错误消息:

pniedzielski@patrick-laptop-debian:~$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib …
Run Code Online (Sandbox Code Playgroud)

c++ templates virtual-functions

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