小编Vio*_*ffe的帖子

在哪些情况下__declspec(对齐(#))不起作用?

我有一节课:

class CMatrix4f
{
public:
    CMatrix4f();

public:
     __declspec(align(16)) float m[16];
};
Run Code Online (Sandbox Code Playgroud)

此类使用SSE实现矩阵操作,因此m 必须对齐才能使其工作.它大部分时间都可以工作,但有时我会在执行SSE指令时遇到段错误,例如_mm_load_ps因为m不是16字节对齐.到目前为止,我无法理解它发生在哪些情况.

当我这样做CMatrix4f * dynamicMatrix = new CMatrix4f();,是dynamicMatrix.m保证对齐?

如果我有课:

class MatrixWrapper {
public:
   MatrixWrapper();

   CMatrix4f _matrix;
};
Run Code Online (Sandbox Code Playgroud)

然后做:

MatrixWrapper * dynamicMatrixWrapper = new MatrixWrapper();
Run Code Online (Sandbox Code Playgroud)

dynamicMatrixWrapper._matrix.m保证对齐?

我已经阅读了关于路由的MSDN文章,但目前还不清楚它是否适用于动态分配.

c++ windows memory-alignment visual-c++

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

如何在Android上打印堆栈跟踪(带符号功能名称)?

这个问题已被多次询问,但它从未得到过真正的回答.今天我花了5到6个小时试图将一些库移植到Android(libunwind,liwdfl),这些库可能从未打算用于ARM.当然无济于事.

问题是Android缺乏backtrace/ backtrace_symbols功能.有没有人找到一种方法来打印stacktrace,比如收到SIGSEGV?

c++ android stack-trace android-ndk

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

NDK调试:ndk-gdb无法拉取app_process.谁和何时创建app_process二进制文件?

在调查本机代码中遇到断点的问题时,我决定检查ndk-gdb是否正常工作.我删除了app_process,启动了Java调试并运行ndk-gdb --force.猜猜看,没有创建app_process.ndk-gdb --verbose输出有这一行:

## COMMAND: adb_cmd pull /system/bin/app_process obj/local/armeabi-v7a/app_process
remote object '/system/bin/app_process' not a file or directory
Pulled app_process from device/emulator.
Run Code Online (Sandbox Code Playgroud)

我已经从目标设备上卸载了应用程序,重新启动了设备并重复了.仍然没有app_process.所以,我想知道这里的问题是什么,我也想知道什么时候创建这个文件,以及什么进程/脚本.

windows debugging android android-ndk eclipse-adt

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

从 Foo** 到 void** 的无效转换 - 为什么隐式类型转换允许到 void* 而不允许到 void**?

struct Foo {};
...
void * p = (Foo*)0; // OK
void ** pp = (Foo**)0; // Invalid conversion
Run Code Online (Sandbox Code Playgroud)

据我所知,void*在 C++ 中可以隐式转换为指向任何非指针类型的指针。为什么同样不允许将 ponter 转换为指针类型 to void**

c++ gcc type-conversion

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

如何在批处理脚本中将所有环境变量恢复为默认值

我有一个.bat脚本.它运行一些命令并改变/添加一些环境变量.然后,在某些时候我需要将它们全部恢复为默认值,就好像我正在退出此脚本并从头开始一个新脚本.
所以,我需要两个中的一个:
1.要么清除变量(恢复新cmd会话获得的默认值);
2. push当我启动脚本并pop稍后恢复为这些值时,或者所有变量.

我怎样才能做到这一点?

windows batch-file

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

使用MSBuild将/ MP选项传递给编译器

我有一个VC项目文件,我正在使用MSBuild从命令行构建.我想指定/MP标志而不编辑项目文件.那可能吗?我之前尝试过set CL=/MP调用MSBuild,但它没有效果.

c++ windows msbuild visual-studio

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

如何在UTF-8文本中搜索行尾('\n')?

我有一个C++库,提供I/O设备接口(包括文件的实现).它还提供UTF-8字符串类.现在,我只需要从中读取一行IODevice.我提到这个库的原因是我不能,例如,打开文件std::ifstream并使用类似的东西读取它std::wbuffer_convert<std::codecvt_utf8<wchar_t>>.我不介意使用stdlib(事实上,我更喜欢它),但我确实需要从我的行中读取IODevice并将其作为我的返回String.

现在,具体问题是:如果我逐字节地读取文件,是否可以安全地假设任何具有值的字节'\n'实际上是新的行符号,而不是某些不同的多字节符号的尾部?

c++ unicode utf-8

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

基于范围的for循环是否缓存容器表达式,或者每次迭代重新计算它?

我有以下代码:

for (auto it = _locations.locations().begin(); it != _locations.locations().end(); ++it)
   // Do something
Run Code Online (Sandbox Code Playgroud)

我想替换它

for (const auto& location: _locations.locations())
   // Do something
Run Code Online (Sandbox Code Playgroud)

但后来意识到我不知道它是如何起作用的.是否会在locations()每次迭代时调用该方法,或者是否会在本地"缓存"容器表达式求值的结果,从而只导致一次locations()调用?标准是否以这种或那种方式定义了这种行为?

c++ foreach c++11

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

是否可以从原始内存块反序列化没有默认构造函数的对象?

我在写这个小工具,可以避免严格的别名冲突:

template <typename TargetType>
TargetType memory_cast(const void* const memoryPtr) noexcept
{
    static_assert(!std::is_reference_v<TargetType>);
    static_assert(std::is_trivially_copy_assignable_v<TargetType>);

    TargetType value;
    ::memcpy(&value, memoryPtr, sizeof(value));

    return value;
}
Run Code Online (Sandbox Code Playgroud)

我想到,如果TargetType它不是默认可构造的,它将失败,但是从技术上讲,这并不重要,因为我们已经具有对象的完整构造数据,只是没有对象实例本身可以将数据放入其中。无需调用UB即可在现代C ++中解决此问题的方法?

c++ language-lawyer c++17

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

在这个简单示例中,为什么 std::optional 的赋值运算符在编译时上下文中不可用?

摆弄编译器资源管理器(以及在 std::optional 上阅读 cppref.com)半小时后,我放弃了。除了我不明白为什么这段代码不能编译之外,没有什么可说的。有人请解释这一点,如果有的话,也许可以告诉我一个解决方法?std::optional我在这里使用的所有成员函数都是constexpr,并且确实应该在编译时可计算,因为这里的可选类型 - size_t- 是原始标量类型。

#include <type_traits>
#include <optional>

template <typename T>
[[nodiscard]] constexpr std::optional<size_t> index_for_type() noexcept
{
    std::optional<size_t> index;
    if constexpr (std::is_same_v<T, int>)
        index = 1;
    else if constexpr (std::is_same_v<T, void>)
        index = 0;

    return index;
}
 
static_assert(index_for_type<int>().has_value());
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/YKh5qT4aP

c++ templates constexpr c++20 stdoptional

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