clang

What is clang trying to do optimizing this simple recursive algorithm?

佐手、 提交于 2020-05-12 19:52:38
问题 Upon writing an answer to this question: Using variable vs. using number I ran clang x86 9.0.0/trunk with -O3 to see if it could do tail-call optimization of this simple code: int faculty1 (const unsigned int n) { return n == 1 ? n : n * faculty1(n - 1); } Not only does clang fail that, it goes completely bananas and gives me this: godbolt .LCPI0_0: .long 0 # 0x0 .long 4294967295 # 0xffffffff .long 4294967294 # 0xfffffffe .long 4294967293 # 0xfffffffd .LCPI0_1: .long 1 # 0x1 .long 1 # 0x1

What's the proper way to enable AddressSanitizer in CMake that works in Xcode

混江龙づ霸主 提交于 2020-05-10 03:46:17
问题 I've added AddressSanitizer flag as follow: set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") Everything builds and runs fine when using Unix Makefiles . The problem comes when generating the Xcode project, it just doesn't want to link because it cannot find the ASan library. I already found two solutions, but decided not to use them because they cannot be automated using just CMake: Adding -Wl,-undefined,dynamic_lookup to the linked flags, so it skips linking to dynamic libraries

What's the proper way to enable AddressSanitizer in CMake that works in Xcode

旧街凉风 提交于 2020-05-10 03:43:10
问题 I've added AddressSanitizer flag as follow: set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") Everything builds and runs fine when using Unix Makefiles . The problem comes when generating the Xcode project, it just doesn't want to link because it cannot find the ASan library. I already found two solutions, but decided not to use them because they cannot be automated using just CMake: Adding -Wl,-undefined,dynamic_lookup to the linked flags, so it skips linking to dynamic libraries

iOS开发——Block内存管理实例分析

大兔子大兔子 提交于 2020-05-09 17:41:04
说道block大家都不陌生,内存管理问题也是开发者最头疼的问题,网上很多讲block的博客,但大都是理论性多点,今天结合一些实例来讲解下。 存储域 首先和大家聊聊block的存储域,根据block在内存中的位置,block被分为三种类型: NSGlobalBlock NSStackBlock NSMallocBlock 从字面意思上大家也可以看出来 1、 NSGlobalBlock 是位于全局区的block,它是设置在程序的数据区域(.data区)中。 2、 NSStackBlock 是位于栈区,超出变量作用域,栈上的Block以及 ____block__变量都被销毁。 3、 NSMallocBlock 是位于堆区,在变量作用域结束时不受影响。 注意:在 ARC 开启的情况下,将只会有 NSConcreteGlobalBlock 和 NSConcreteMallocBlock 类型的 block。 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群: 413038000 ,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长! 推荐阅读: iOS开发——2020 最新 BAT面试题合集(持续更新中) 说了这么多理论的东西,有些人可能很懵,觉得讲这些有什么用呢,我平时使用block并没有什么问题啊,好了

VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)

醉酒当歌 提交于 2020-05-05 11:28:27
更正了顺序, 之前不知道怎么回事,内容顺序乱了 力求完美、详细,所以希望懂的人留言指点一下。 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接   后续会慢慢增添内容,修正不足。 希望这篇文章能带大家入坑。 Ps.2019年消息:VSCODE已支持全局配置,C/Cpp插件也支持UI界面设置。 具体请看官网或利用搜索引擎寻找资料 请耐心看完,因为这能让你了解什么是IDE、调试、运行和命令行以及系统和程序之间的关系 如果只是想找三个文件的配置方法,请点下面导航。(其实这三个文件配置并不难,难的是没用过gcc g++ gdb,当你稍微地使用之后,配置自然是水到渠成) 基本上各平台配置内容的差异只在于那个include路径(疯狂使用搜索引擎),所以只要写下正确路径,其他就没什么大问题了 目录书签导航 下载安装(2个软件) 配置MSYS2环境 && 换源 安装Mingw-w64编译工具 变量配置 VS Code与MinGw搭配使用 c_cpp_properties.json launch.json tasks.json VS Code官方文档(谷歌翻译) && 目录结构 让Msys2更顺手 glibc问题(Linux) 在VSCode中使用Git 关于学习的理念 强烈建议先初步学会使用gcc(mingw64)等命令,这样配置才不会一脸懵逼 1,下载安装

VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)

爱⌒轻易说出口 提交于 2020-05-05 10:22:50
更正了顺序, 之前不知道怎么回事,内容顺序乱了 力求完美、详细,所以希望懂的人留言指点一下。 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接   后续会慢慢增添内容,修正不足。 希望这篇文章能带大家入坑。 Ps.2019年消息:VSCODE已支持全局配置,C/Cpp插件也支持UI界面设置。 具体请看官网或利用搜索引擎寻找资料 请耐心看完,因为这能让你了解什么是IDE、调试、运行和命令行以及系统和程序之间的关系 如果只是想找三个文件的配置方法,请点下面导航。(其实这三个文件配置并不难,难的是没用过gcc g++ gdb,当你稍微地使用之后,配置自然是水到渠成) 基本上各平台配置内容的差异只在于那个include路径(疯狂使用搜索引擎),所以只要写下正确路径,其他就没什么大问题了 目录书签导航 下载安装(2个软件) 配置MSYS2环境 && 换源 安装Mingw-w64编译工具 变量配置 VS Code与MinGw搭配使用 c_cpp_properties.json launch.json tasks.json VS Code官方文档(谷歌翻译) && 目录结构 让Msys2更顺手 glibc问题(Linux) 在VSCode中使用Git 关于学习的理念 强烈建议先初步学会使用gcc(mingw64)等命令,这样配置才不会一脸懵逼 1,下载安装

Windows编译OpenBLAS

Deadly 提交于 2020-05-04 09:39:42
在尝试用 LazyNet 时,由于原作者提供的OpenCV和OpenBLAS版本和我的环境不一样,考虑自行配置依赖。 OpenCV源码编译的文章很多,这里主要说一下OpenBLAS的编译。 cblas_sgemm crash 基于VS2017的MSVC编译器,编译安装openblas develop分支最新版,发现 LazyNet 代码有crash(access violation),而在Linux(ubuntu16.04,G++/Clang++-8)则运行正常。剥离出来的复现问题的最小化代码见下方,解决办法是 用clang-cl(Windows下和MSVC兼容的clang编译器)重新编译OpenBLAS , 讨论帖在此 。 #include <stdio.h> extern "C" { #include <cblas.h> } int main() { printf("OpenBLAS config info:\n%s\n", openblas_get_config()); #if 1 // will cause crash on VS2017 x64 with OpenBLAS latest const int M = 16; const int N = 676; const int K = 27; #else // won't crash const int M = 4;

win10下VSCode+CMake+Clang+GCC环境搭建

自闭症网瘾萝莉.ら 提交于 2020-05-04 06:07:04
win10下VSCode+CMake+Clang+GCC环境搭建 <!-- TOC --> win10下VSCode+CMake+Clang+GCC环境搭建 安装软件 安装VSCode插件 新建文件夹, 开始撸代码 main.cpp CMakeList.txt 配置 c_cpp_properties.json 配置CMake 配置调试文件 launch.json 和 task.json 编译和调试 <!-- /TOC --> 打算用C/C++把基本的数据结构与算法实现一遍, 为考研做准备, 因为只是想实现算法和数据结构, 就不太想用VisualStudio, 感觉VSCode不错, 遂在网上找了一些教程, 结合自己的需求, 配置一下开发环境. 安装软件 CMake CMake是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程; 官网 下载安装, 傻瓜式操作; 记得把安装目录下的bin文件添加到系统环境变量, 这个可以在安装的时候勾选, 勾选了就不用自己添加了; 检测是否安装成功: MinGW MinGW即Minimalist GNU For Windows,是将GNU开发工具移植到Win32平台下的产物,是一套Windows上的GNU工具集。简单说,MinGW是一个编译环境; 相当于linux下的GCC; 官网下载链接 ;

Ninja使用Visual Studio(cl.exe)构建

為{幸葍}努か 提交于 2020-05-02 06:36:54
[TOC] Ninja基本步骤 Ninja的作用是加速构建,最初目的是替代make,现在Windows系统上也可以用,也就是用Ninja替代nmake或者MSBuild来生成target。 本人不做Chromium等大型程序构建,jenkins也没怎么用过。平时接触到用Ninja的地方只有一个:android ndk开发时,编一个arm android console application可执行程序时(或者编库)时用到。当然,这个可以丢给自动构建。 这次在caffe-builder的脚本中看到willyd调用的是Ninja,换成Visual Studio会提示报错,“和先前的Ninja不一致”。VS是集成开发环境,它的编译器是cl.exe。 网络上搜到的用cl.exe编译、用Ninja构建的例子,是Windows下编译clang源码中的 官方步骤 中给出的: 没错,只需要这几个步骤: 进入cmd,并且正确的设定需要用到的编译器(VS)环境,例如vs2015的就用vs2015的,以及注意x64还是x86等 确保CMakeLists.txt存在,编写正确 到build目录去调用cmake,指定generator为Ninja Ninja xxx Ninja在VS2015下的问题和解决 基于上述步骤,尝试了VS2017下的调用: cd /d d:/toy/rr call "C:

Python类变量和实例变量(类属性和实例属性)

杀马特。学长 韩版系。学妹 提交于 2020-04-29 17:17:31
转载: http://c.biancheng.net/view/2283.html 无论是类属性还是类方法,都无法向普通变量或者函数那样,在类的外部直接使用它们。我们可以将类看做一个独立的空间,则类属性其实就是在类体中定义的变量,类方法是在类体中定义的函数。 前面章节提到过,在类体中,根据变量定义的位置不同,以及定义的方式不同,类属性又可细分为以下 3 种类型: 类体中、所有函数之外:此范围定义的变量,称为类属性或类变量; 类体中,所以函数内部:以“self.变量名”的方式定义的变量,称为实例属性或实例变量; 类体中,所有函数内部:以“变量名=变量值”的方式定义的变量,称为局部变量。 不仅如此,类方法也可细分为实例方法、静态方法和类方法,后续章节会做详细介绍。 那么,类变量、实例变量以及局部变量之间有哪些不同呢?接下来就围绕此问题做详细地讲解。 类变量(类属性) 类变量指的是在类中,但在各个类方法外定义的变量。举个例子: class CLanguage : # 下面定义了2个类变量 name = "C语言中文网" add = "http://c.biancheng.net" # 下面定义了一个say实例方法 def say (self , content ): print (content ) 上面程序中,name 和 add 就属于类变量。 类变量的特点是